如何更好地解决反水蛭?

时间:2012-05-31 07:51:31

标签: apache web

当我遇到热门问题时,我搜索了网站并找到了解决问题的两种方法。 第一种是更简单,更简单的方法,代码如下所示:

RewriteEngine On 
RewriteCond %{HTTP_REFERER}!^$ Options +FollowSymlinks 
RewriteCond %{HTTP_REFERER}!^http://(www\.)?mydomain.com(/)?.*$ [NC] 
RewriteRule .*\.(gif¦jpg¦jpeg¦png¦swf)$ [mydomain.com...] [R,NC]"

这只能阻止一些简单的吮吸,但对于坚定的人无能为力。

另一种方法是使用基于脚本和cookie的方法的更好方法。他们说:“您在网站的'授权'页面上设置了一个cookie,然后只有在图像请求中存在正确的cookie时才使用脚本来提供图像。图像保存在只能由脚本访问的目录中,并且不是通过网络。因此,该脚本充当您网站上的“图像服务器”。“我理解这个原则,但不知道如何实现它。有谁知道如何实现这一点?

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

我不能真正给出任何实现,但只知道如何实现它:

您需要一个“门户”页面,您可以在其中为用户设置Cookie。任何没有网站cookie的资源请求都应该重定向到这里。这里可能没有登录机制,具体取决于您网站的目的,但通常您会在用户登录后设置cookie。

所有资源链接都将链接到同一个“脚本”页面。区别在于不同的资源将具有不同的标识符(可以是某种id - 如果您维护id到文件路径映射的数据库)。标识符必须包含在URL的查询中。 “脚本”将根据标识符在服务器上找到资源(在id到文件映射的情况下,您将获取文件路径并检索文件)。

会有一个“脚本”页面,例如可以是php代码。它将检查cookie,然后检查标识符,然后相应地加载资源。您可能还想检查Referer以更多地限制访问(不检查,热链接将适用于任何登录用户)。


在此实现中,共享资源的热链接不适用于未访问“门户”页面的任何用户(或者尚未登录,具体取决于您的网站)。即使是登录用户,如果他们从其他地方点击链接也不会起作用。

但是,在您的问题中提到的两种实现中,抓取您的网站资源很简单,因为scraper可以自由调整HTTP标头。