簡體   English   中英

如何確保人類不會查看PHP腳本URL的結果?

[英]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腳本檢查它。

  • 使用瀏覽器請求'index.php'。
  • PHP構建頁面,將密鑰保存到會話中,將內容發送回瀏覽器。
  • 瀏覽器獲取頁面內容並向您的站點發出一些ajax請求。
  • 這些ajax腳本還可以訪問主頁所執行的相同會話,從而可以檢查密鑰。

這樣可以確保只有經過身份驗證的瀏覽器才能生成ajax請求。

不要指望能夠寫入會話的ajax請求。 在同時滿足許多請求的情況下,最后一個請求將是寫回會話存儲的最后一個請求。

http://us.php.net/manual/en/book.session.php

許多開源應用程序在每個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM