2011-05-04 109 views
0

請幫我解決盜鏈,如何防止直接訪問這個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://stackoverflow.com/questions/165975/determining-referer-in-php – Paul 2011-05-04 07:25:25

回答

1

,您在搜索這樣的事情:

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

0

爲目的回答這個問題,我假設你不在乎同一用戶是否多次訪問 (假設第一次訪問是通過主索引頁面訪問的)。這也假定用戶將接受一個cookie。

當主索引頁:

  1. 啓動上的index.php
  2. 會話把一些隨機值的會話中。例如:md5(microtime())= af1929191 ...
  3. 也將該隨機值放在每個url內部作爲另一個參數,例如:index.php?verify = af19 ... & link = http://foo.com

當加載網址:

  1. 檢查,看是否「驗證」 參數是設置如果它不存在, 重定向他們回到主索引 頁。或者更有幫助,因爲你正在創建一個奇怪的行爲,向他們展示一個錯誤消息,指出你在做什麼,以及爲什麼。
  2. 啓動 會話並確保其會話中的值 與url中的值 匹配。
0

使用的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]