[英]How to make sure a human doesn't view the results from a PHP script URL?
如何確保人類不會查看PHP腳本URL的結果?
最近,在查看正在進行AJAX調用的站點的源時,我嘗試按照瀏覽器中的鏈接進行操作
www.site.com/script.php?query=value
我沒有看到我期望看到的結果,而是看到一條消息,說明只有腳本才能查看該頁面。
如何將腳本限制為僅允許腳本訪問它?
更新:
這是頁面DEMO頁面
簡短的回答:你做不到。
答案很長:通過在HTTP請求中要求特殊的標頭值,你可以更難做到這一點(設置Accept to application / json是常見的)。 在服務器端,只需檢查以確保標頭設置為您期望的值。 這將使常規用戶獲得您提到的消息,並且您的腳本將正常工作。 當然,高級用戶將能夠輕松解決這種限制,因此不要依賴它來提高安全性。
使用php,您可以檢查並僅在通過ajax調用頁面時顯示結果
function isAjax() {
return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'));
}
if(isAjax()) {
// display content
} else {
// not ajax, dont show
echo 'Invalid Request';
}
你不能。 人類總是可以欺騙請求。 您可以使用post變量發送您的請求,以確保人不會意外地在頁面上結束。
一種可能的解決方案是檢查HTTP請求的來源。 另一種解決方案是在每個請求中發送“密碼”。 看一下本教程如何做到這一點。
但它永遠不會100%安全,它只會讓可能的入侵者更難。
正如蒂姆所說的那樣,這個腳本幾乎肯定在尋找這個請求頭,它隨每個請求一起發送到rpc.php(通過firebug中的網絡面板自然發現):
X-Requested-With : XMLHttpRequest
至於跨瀏覽器兼容性, setRequestHeader方法似乎可以與activex和xmlhttprequest連接一起使用,因此這應該適用於所有主要的現代瀏覽器。
如果您通過AJAX調用腳本,那么它必須是可訪問的,因為AJAX調用類似於您的瀏覽器實際要求頁面,因此它不僅可以訪問腳本,而且任何人都可以訪問。
如果它實際上是由PHP或其他方式調用的,那么您可以“使用”Apache規則或PHP腳本來減少可訪問性。
您可以使用'view'腳本將秘密值設置到php會話中,並使用ajax腳本檢查它。
這樣可以確保只有經過身份驗證的瀏覽器才能生成ajax請求。
不要指望能夠寫入會話的ajax請求。 在同時滿足許多請求的情況下,最后一個請求將是寫回會話存儲的最后一個請求。
許多開源應用程序在每個php文件的頂部使用這種變體:
if (!defined('SOMETHING')) {
die('only scripts have direct access');
}
然后在index.php中定義SOMETHING:
define("SOMETHING", "access granted.");
編輯:我不是說這是一個很好的方法順便說一句
edit2:似乎我錯過了關於它是一個ajax請求的部分。 我同意在這種情況下,這不是一個解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.