2010-07-11 79 views
2

我設置了一些頁面,以便它們僅響應ajax請求。問題是我該如何設置它,以便有人試圖通過瀏覽器窗口發送請求,即通過輸入它們 - 它們不會運行,並且只有在發出ajax調用時才運行。頁面在這裏的PHP檢查您的頁面是不是通過ajax請求?

+0

沒有這樣的穩定​​方式除了找頭,您可以發送正確的內容類型爲'應用程序/ json'這將促使在Firefox中至少下載。它*可能*作爲5秒的威懾力:P – alex 2010-07-11 14:13:19

+1

正如其他人所提到的,請記住,這些東西可以僞造。 – 2010-07-11 14:21:24

回答

12

沒有可靠的方法來區分AJAX請求和正常的請求。某些庫(如jQuery)會爲請求附加額外的X-Requested-With: XMLHttpRequest HTTP標頭,但其他庫可能不會。您可以使用瀏覽器提供的低級對象僞造AJAX請求,該對象與普通請求看起來完全相同,因此不要太多。

+0

從來沒有想過 - 現在我只是把檢查額外的標題。 – Ali 2010-07-12 05:06:23

+0

@DarinDimitrov,我可以請你看看http://stackoverflow.com/questions/11548965/file-get-contents-or-curl-way-nothing-works-in-internet-server-though-thos關於PHP的get_file_contents()和curl()問題? – 2012-07-18 21:25:23

5
define('XHR', (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')); 

如果您使用JS設置http標頭(自動在jQuery中完成),請使用此常量。

+0

HTTP標頭很容易僞造。這隻會拖慢某人,而不是阻止他們。 – James 2010-07-11 16:40:28

+1

減慢他們是你想要的。做得越困難,人們做這件事的可能性就越小。門窗上的鎖等不會阻止人們闖入你的房子,但他們不太可能。 – Richard 2011-12-02 05:10:04

2

您可以檢查的所有信息(標題,引薦等等)來自瀏覽器,並且可以僞造。

如果用戶被正確驗證(例如:通過cookie +數據令牌),那麼您不會通過瀏覽器窗口暴露的系統比正常的ajax使用更多。

2

AJAX在瀏覽器窗口內完成。我想你的意思是通過在瀏覽器中輸入URL來阻止人們訪問它。你可以簡單地使用POST。有人必須編寫HTML來訪問您的頁面。

您還可以在JSON發送請求,添加自定義頁眉等

2

如果在調用用手AJAX URL(或工具),可以做一些服務器上的危險沒有solution.If其安全性您需要確保處理ajax調用的代碼的原因。只允許那些不會造成任何傷害的。

+1

同意,沒有辦法阻止它,所以相反,修復您的系統,以便有人這樣做不是問題。 – JAL 2010-07-11 16:48:39

0

有這個