在我去指責某人......之前,我需要確認一些事情,我寧願不說。通過.htaccess防止熱鏈接的高效方法
問題:
我們允許用戶上傳圖片,並在我們的網站文字中嵌入它們。在過去,我們允許用戶鏈接到我們的圖片,但由於服務器負載,我們不得不阻止這一點。
當前的「解決方案」:
用來解決我們的「連接過多」的問題,程序員是重命名接收和處理圖像的請求(image_request.php)到image_request2.php文件的方法,與
<?php
header("HTTP/1.1 500 Internal Server Error") ;
?>
顯然,這已經引起了所有圖像與他們的src屬性指向原始image_request.php被打破,也是在這種情況下發出錯誤的代碼替換原來的內容。
建議解決辦法:
我覺得一個更優雅的解決辦法是:
在.htaccess
- 如果請求的是image_request.php
- 檢查引薦
- 如果推薦人不是我們的網站,請發送相應的標題
- 如果引用是我們的網站,請繼續image_request.php和處理圖像要求
我想知道的是:
相比於簡單地返回一個500爲每個請求image_request.php :
多少更多如果我們要使用我上面提出的替代解決方案,會產生負載嗎?
有沒有更好的方法來做到這一點?
我們主要關心的是該網站保持運行狀態。我不願意同意打破所有內部鏈接的圖像是解決這個問題的最好的/唯一的方法。我拒絕告訴我們的用戶,由於我們改變了一些東西,他們現在必須手動更改以前上傳的內容中的嵌入代碼。
我假設你使用的是數據庫?在這裏扮演魔鬼的擁護者,爲什麼你不能在存儲的數據中搜索並替換image_request.php的所有實例?你不需要告訴你的用戶任何東西... – Drew 2010-05-24 06:41:47
有效評論,我確實考慮過這個。 (1)我不認爲程序員的「解決方案」應該被執行,我希望他們能夠正確地解決它 (2)我不是100%確定當程序員將代碼從image_request.php複製到image_request2.php,但他們也沒有對文件調用不兼容的更改進行修改。 (3)除了從用戶內容中剝離調皮內容(例如腳本標記)之外,我反對偷偷地「更新」他們的內容,並且不想處理他們可能導致的任何不可預知的問題。 – 2010-05-24 09:27:45
感謝您的回覆。我發現你的任何理由都沒有錯。項目祝你好運! – Drew 2010-05-25 02:12:29