如何防止直接访问URL?

如何防止直接访问URL?

问题描述:

请帮我解决盗链,如何防止直接访问这个URL并重定向访问者的index.php:如何防止直接访问URL?

http://www.example.com/index.php?link=http://www.anysite.com/dir/file&name=on&email=on&submit=on 
+0

你想阻止特定的网址吗?你想只允许特定的网址吗? GET参数'link'在哪里被处理?一些代码?太模糊。如果问题没有被重新访问,在5分钟内标记。 – Shoe 2011-05-04 07:18:44

+0

我猜你想阻止深度链接。通常情况下,这是通过apache的配置而不是PHP来完成的,并且关于防止深度链接的话题几乎可以肯定已经有很多问题。 – GordonM 2011-05-04 07:24:11

+0

请参阅http://*.com/questions/165975/determining-referer-in-php – Paul 2011-05-04 07:25:25

,您在搜索这样的事情:

if(!strpos('mysite.com',$_SERVER["HTTP_REFERER"])) header('Location: index.php') 
+0

无法正常工作,我仍然可以通过复制粘贴直接访问我的链接 – Mikerobenics 2011-05-04 07:57:58

+0

HTTP_REFERER不是很可靠。有些隐私插件会设置随机(或空白)插件,因此可能会有一些人无论如何都无法访问您的链接。 – sfrench 2011-05-04 08:07:04

为目的回答这个问题,我假设你不在乎同一用户是否多次访问 (假设第一次访问是通过主索引页面访问的)。这也假定用户将接受一个cookie。

当主索引页:

  1. 启动上的index.php
  2. 会话把一些随机值的会话中。例如:md5(microtime())= af1929191 ...
  3. 也将该随机值放在每个url内部作为另一个参数,例如:index.php?verify = af19 ... & link = http://foo.com

当加载网址:

  1. 检查,看是否“验证” 参数是设置如果它不存在, 重定向他们回到主索引 页。或者更有帮助,因为你正在创建一个奇怪的行为,向他们展示一个错误消息,指出你在做什么,以及为什么。
  2. 启动 会话并确保其会话中的值 与url中的值 匹配。

使用的htaccess文件是解决这个问题的共同解决方案:
http://altlab.com/htaccess_tutorial.html
这段代码在特定重定向任何人试图热链接的图像。

RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC] 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteRule .*\.(jpe?g|gif|bmp|png)$ http://img148.imageshack.us/img148/237/hotlinkp.gif [L]