PHP防止图像刮擦

问题描述 投票:2回答:1

我有一个提供许多图像的项目。该项目还有一个API,不仅可以提供图片链接,还可以提供图片链接。

我想有一种方法来成功避免报废图像。我不介意用户可以单独下载每个图像,但不希望有人可以同时刮擦所有图像以避免高带宽使用。

我虽然使用htaccess拒绝直接访问图像文件夹。另外,还考虑在PHP(在网站中)中使用动态链接来显示图像(例如loadimage.php?id=XXXXX),以便我的用户不知道完整的图像链接。

如何在API(甚至在网站)中进行操作以防止抓取?我虽然使用了令牌,但每个请求都会生成一个新的“图像ID”,但是我丢失了某些内容,或者无法弄清楚如何使其工作。

我知道不可能有一个100%有效的方法来做到这一点,但是任何有关如何解决它的建议都会受到赞赏。

谢谢。

php .htaccess
1个回答
0
投票

您正在寻找限速政策。它涉及跟踪请求图像的次数(或交换的字节数),以及在超过阈值时发出(通常)429 Too Many Requests响应。

Nginx对于速率限制有相当不错的built-in tools。您提到.htaccess表示Apache,为此也有一个rate limiting module

您可以使用或不使用PHP来执行此操作。您可以标识要限制速率的URL模式,然后将速率限制策略应用于该URL模式(可以是PHP脚本或只是某个目录)。

对于Apache:

<Location ".../path/to/script.php">
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 400 
    SetEnv rate-initial-burst 512
</Location>

或者,您可以在您的PHP中编写代码,以写入对数据库的访问,并基于给定窗口期内的访问次数来实施限制。

当Web服务器本身支持如此好的工具时,我通常不建议自己编写。一个例外是,如果您在群集中使用多个Web服务器,则它们无法轻松地在服务器上同步限速阈值和计数。

© www.soinside.com 2019 - 2024. All rights reserved.