代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

是如果($referer!=“mysite.com”)不是防止其他网站硬链接我的图片或SWF的好方法?

  •  4
  • nonopolarity  · 技术社区  · 15 年前

    有时,当浏览器查看www.somesite.com/some_image.jpg时,我会看到一个图像未被提供——它会说您需要从一个页面内查看该图像。

    (例如使用谷歌的图片搜索和查看某些结果时)

    所以我认为他们的服务器正在使用

    # pseudo code
    if ($referer not contain "mywebsite.com") then not serve the image / swf
    

    但这可能不是一个好方法,因为HTTP引用不可靠?因此,当引用者信息丢失时,一些用户最终将看不到图像或SWF?

    7 回复  |  直到 15 年前
        1
  •  4
  •   Marc Towler    15 年前

    或者,如果您有权使用.htaccess文件,则可以执行以下操作:

    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http://(www\.)?example.com/.*$ [NC]
    RewriteRule \.(gif|jpg|js|css|cur|png|jpeg)$ - [F]
    

    或者,如果您希望他们看到不同的图像,请执行以下操作:

    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http://(www\.)?example.com/.*$ [NC]
    RewriteRule \.(gif|jpg)$ http://www.example.com/angryman.gif [R,L]
    
        2
  •  4
  •   unlobito    15 年前

    它可能是可靠的,但有些防火墙会把它剥离出来,所以你应该这样做。

    // psuedo code
    if ($referer does not contain "example.com" and $referer is set and $referer is not equal to "") then do not serve image
    
        3
  •  2
  •   Oli    15 年前

    就像另一种方式一样,我认为在你得到一个开玩笑的人每天推送数千个请求(没有任何真正的链接通过)之前,随意地允许热链接引用是非常有趣的。我所做的就是将图像重定向到 某物 完全地 不同的 .

    想想山羊胡子。只有卑鄙。

        4
  •  1
  •   Eugene Yokota    15 年前

    这并不完美,但如果它能阻止80%的观众(他们不知道如何黑掉裁判)抢走你的形象,那可能比什么都没有要好。您还应该将图像文件夹包含在随机命名的文件夹下,并定期重命名它们以防止直接链接。

        5
  •  0
  •   Oli    15 年前

    我会把这个数字升级到99.几乎所有人都不会有干扰引用字符串的代理。

    但是,对裁判来说 wget (等)。

        6
  •  0
  •   chepner    15 年前

    引用头只是文本,因此可以在HTTP请求中伪造。如前所述,您可以照顾绝大多数人。

        7
  •  0
  •   nonopolarity    15 年前

    和亨利·沃森一样,我在想

    # pseudo code
    if($referer not empty and $referer not contain "mywebsite.com") then don't serve it. 
    

    再次检查3个案例:
    referer empty==gt;已提供
    referer不为空,包含“mywebsite.com”==>已提供
    referer not empty and not contian“mywebsite.com”==gt;未提供

    然后,进行硬链接的人很可能会发现,以这种方式链接并立即更改它是不起作用的。