2013-04-10 98 views
2

我讀過很多有關的.htaccess規則,檢查頭,使用加密等。但我還沒有找到確切我之後的答案。我知道假設服務器設置正確,您無法通過AJAX訪問我珍貴的PHP腳本。我試着檢查一個訪問變量是否定義了哪個地址欄不允許訪問,但是也阻止了我的AJAX請求。防止外部訪問的PHP腳本,但允許AJAX

如果我有使用AJAX調用一些PHP腳本,是有辦法,我可以阻止地址欄訪問,PHP POST(捲曲等)以及AJAX從我的域名外(通過交叉假設域訪問限制)?

+1

不,這是不可能的。 – meagar 2013-04-10 17:19:59

+1

您無法阻止公開(不允許AJAX)訪問並同時允許它。 – 2013-04-10 17:22:59

+0

那麼任何知道腳本路徑的人都可以使用AJAX修改我的SQLite數據庫? – rtheunissen 2013-04-10 17:23:05

回答

4

NO方式絕對是安全/可靠識別請求來自哪個瀏覽器的一部分,從 - 地址欄,AJAX。有一種方法,以確定是什麼,雖然發送器/捲曲的/ etc通過User-Agent頭(但並不可靠)

快速,但少了很多可靠的解決方案是檢查下面的頭。大多數瀏覽器都使用AJAX調用來附加它。一定要徹底研究並實施。

X-Requested-With: XMLHttpRequest 

注意:如果資源cruicial不要相信客戶端。你最好實施一些其他的訪問過濾手段。請記住,任何人都可以僞造標題!

0

您可以檢查該請求是否是不是一個Ajax請求,並禁止它,但它不是真正的安全由於該頭可以被操縱。

你可以做的是阻止每一個IP,除了被允許訪問這些文件的IP。

什麼可以做要麼就是兩個國家執行一種認證,其中,外部應用程序必須發送憑據,你的腳本,這些腳本會檢查客戶端是有效的。

很多方法,但它們都不是真正實現最大安全性的最佳方法。

0

我不確定。然而 - 間接地,你可以做到這一點。傳遞唯一且不斷變化的參數(GET或POST),只有您有權訪問該參數才能證明原點。如果請求缺少這個唯一變量,那麼它不是來自你的。在這個盒子外面思考。可以是任何你想要的,這裏有一些想法。

1)傳遞數學方程的結果作爲原點證明。有些東西可以通過程序預測,但對於駭客頭部黑客來說並不明顯。即cos($dayOfYear)或甚至更好base64_encode(base64_encode(cos($dayOfYear)))

2)存儲在改變每次有人訪問該頁面的數據庫的唯一關鍵。然後將該密鑰與請求一起傳遞,並在最終頁面上進行一些檢查,如果它們不匹配數據庫密鑰,則發現了偷窺式tom。 (注意,將參與對確保邏輯密鑰未請求的傳輸之間改變了)

等。

0

試圖捕捉如果從POST訪問isset SERVER [「HTTP_ORIGIN」],它必須與您的域相同。如果是這樣,那麼POST是由你的網站生成的,並且處理它是安全的。

+1

這不是一個好的答案。除其他原因之外,因爲它始於「嘗試」一詞。不過,它可能已經提出了合理的評論。我鼓勵你在受到讚譽的支持之前進行轉換。 – 2016-08-26 11:00:47