Fw: [問題] 判斷HTTP_REFERER的來源形式

看板PHP作者 (LaPass)時間12年前 (2013/09/14 23:22), 編輯推噓2(2020)
留言22則, 6人參與, 最新討論串1/2 (看更多)
※ [本文轉錄自 Web_Design 看板 #1ID7wJjc ] 作者: LaPass (LaPass) 看板: Web_Design 標題: [問題] 判斷HTTP_REFERER的來源形式 時間: Sat Sep 14 23:19:45 2013 就是.... 如果用戶端從別人連到我的網站 下面兩種形式 都會讓HTTP_REFERER中,出現對方的網站名稱 1.超連結 <a href='http://我的連結.jpg' >點我</a> <a href='http://我的連結.doc' >點我</a> 2.內鑲的播放軟體等 <img src='http://我的連結.jpg' > <embed src="http://我的連結.mp3" /> 我想只針對 <img>、<mp3>做處理 因為,如果是1那種狀況,我可以先吐個html檔 放些javascript進去做一些事 再把連結用location.replace()轉去該檔案的網址 使用者在使用上不會受到影響 但如果是2的狀況 如果我先吐html檔的話,圖片會當場掛掉,出現叉燒包 這不是我期望的結果 請問有沒有辦法區分這次點我的網站的連結是哪一種形式? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.252.123.105 ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: LaPass (111.252.123.105), 時間: 09/14/2013 23:22:09 ※ 編輯: LaPass 來自: 111.252.123.105 (09/14 23:22)

09/14 23:52, , 1F
個人Server端是自己的 然後用的是nginx
09/14 23:52, 1F

09/14 23:53, , 2F
都直接寫conf去判斷referer 不和直接return 403 XDD
09/14 23:53, 2F

09/14 23:53, , 3F
要用PHP判定也可以 沒記錯你是用apache的server
09/14 23:53, 3F

09/14 23:55, , 4F
可以先把這些要防外連的網址全部用rewrite導到一個
09/14 23:55, 4F

09/14 23:56, , 5F
檢查的PHP頁面 在裡面檢查referer 不通過就丟403之類的
09/14 23:56, 5F

09/14 23:57, , 6F
檢查通過就發出sendfile的header 讓apache輸出檔案
09/14 23:57, 6F

09/14 23:59, , 7F
不過這得要apache有裝sendfile 沒有的話只能在PHP裡
09/14 23:59, 7F

09/15 00:01, , 8F
把檔案讀出來echo了 (也可以直接用readfile函式輸出)
09/15 00:01, 8F

09/15 00:02, , 9F
但能的話還是建議用sendfile 效率絕對遠比PHP直接輸出
09/15 00:02, 9F

09/15 00:02, , 10F
還要來得好的多
09/15 00:02, 10F
抱歉,我沒把問題說明清楚.... 舉個例子 http://f23ko.org/test.html 請檢視網頁原始碼,還有點那兩個連結看看 上面那個頁面裡面的兩張圖,看起來都是自己的網站下的沒錯 但那兩張圖其實都放在 imgur 然後這是 .htaccess RewriteEngine on RewriteRule ^img1\.jpg$ redirecti.html RewriteRule ^img2\.jpg$ http://i.imgur.com/ryfT3c5.jpg
這是 redirecti.html (頭尾略) <script> /*做一些有的沒的事情*/ window.location.replace("http://i.imgur.com/vRhaRdA.jpg") </script> 一般轉址是都用下面的 RewriteRule ^img2\.jpg$ http://i.imgur.com/ryfT3c5.jpg
這樣的形式 這樣不論是超連結或圖片,都能顯示的很正常 但如果是img1.jpg那樣,用javascript重新定向 可以在別人點超連結的時候 讓client端去執行一些有的沒的javascript 不過,這種狀況下用<img src='...'> 去讀圖片 圖片會讀不出來 所以,我在想能不能判斷這兩種不同的連結方式 如果是超連結,就用javascript去轉址 如果是圖片,就用PHP的header轉址過去 至於目的..... 其實我沒什麼特別的目的 只是覺得,趁著別人點網址的時候不知不覺的讓對方執行一些javascript 好像可以做一些有趣的事情,這樣 ※ 編輯: LaPass 來自: 111.252.123.105 (09/15 01:28)

09/15 01:47, , 11F
頂多對連結下手 而外加點參數 因為瀏覽器的
09/15 01:47, 11F

09/15 01:48, , 12F
request都是一樣的OwO
09/15 01:48, 12F

09/15 11:58, , 13F
orz....
09/15 11:58, 13F

09/15 20:30, , 14F
是我沒看懂嗎? @@ 怎麼覺得針對檔案類型去做處理就好了?
09/15 20:30, 14F

09/15 21:27, , 15F
他的意思是如果點連結進去就用script轉向,但是用html tag讀
09/15 21:27, 15F

09/15 21:28, , 16F
如果出現其他非圖片header的輸出就會造成死圖,因此只能直
09/15 21:28, 16F

09/15 21:28, , 17F
接讀取圖片資源後輸出
09/15 21:28, 17F

09/16 01:25, , 18F
不過說request都一樣這點... 其實實際上會有個小差異
09/16 01:25, 18F

09/16 01:25, , 19F
有時間先來確認一下不同瀏覽器的狀況
09/16 01:25, 19F

09/16 02:33, , 20F
我也以為都一樣耶 XD 原來其實有小差嗎
09/16 02:33, 20F

09/16 04:05, , 21F
是啊 不過這差異頗因瀏覽器而異啦
09/16 04:05, 21F

09/16 07:07, , 22F
要的話就直接埋原始碼到jpg裡頭 img貼圖不會處理js
09/16 07:07, 22F
文章代碼(AID): #1ID7yY5c (PHP)
文章代碼(AID): #1ID7yY5c (PHP)