3 回答

TA貢獻1802條經(jīng)驗 獲得超5個贊
大多數(shù)Ajax請求/框架應(yīng)該設(shè)置此特定標(biāo)頭,您可以使用它來過濾Ajax v非Ajax請求。我用它來幫助確定大量項目中的響應(yīng)類型(json / html):
if( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && ( $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ) ){ // allow access....} else { // ignore....}
編輯:您可以在自己的Ajax請求中自己添加它,并在javascript代碼中添加以下內(nèi)容:
var xhrobj = new XMLHttpRequest();xhrobj.setRequestHeader("X-Requested-With", "XMLHttpRequest");

TA貢獻1943條經(jīng)驗 獲得超7個贊
這個帖子中建議查看標(biāo)題的任何人在某種程度上都是錯誤的。請求中的任何內(nèi)容(HTTP_REFERER,HTTP_X_REQUESTED_WITH)都可能被不完全無能的攻擊者欺騙,包括共享機密[1]。
您無法阻止人們向您的網(wǎng)站發(fā)出HTTP請求。您要做的是確保用戶在通過會話cookie向網(wǎng)站的某些敏感部分發(fā)出請求之前必須進行身份驗證。如果用戶發(fā)出未經(jīng)身份驗證的請求,請在此處停止并為其提供HTTP 403。
您的示例發(fā)出GET請求,因此我猜您關(guān)注請求的資源要求[2]。您可以對.htaccess規(guī)則中的HTTP_REFERER或HTTP_X_REQUESTED_WITH標(biāo)頭執(zhí)行一些簡單的完整性檢查,以阻止針對明顯虛假請求(或不會收聽robots.txt的愚蠢搜索爬蟲)生成新進程,但如果攻擊者偽造那些,你要確保你的PHP進程盡早退出非經(jīng)過身份驗證的請求。
[1]這是客戶端/服務(wù)器應(yīng)用程序的基本問題之一。這就是為什么它不起作用:假設(shè)您有一種方法讓您的客戶端應(yīng)用程序向服務(wù)器驗證自己 - 無論是密碼還是其他方法。應(yīng)用程序所需的信息必須是應(yīng)用程序可訪問的(密碼隱藏在某處,或其他任何地方)。但是因為它在用戶的計算機上運行,這意味著他們也可以訪問這些信息:他們所需要的只是查看源,二進制或應(yīng)用程序與服務(wù)器之間的網(wǎng)絡(luò)流量,最終他們會弄明白您的應(yīng)用程序進行身份驗證和復(fù)制的機制。也許他們甚至?xí)?fù)制它。也許他們會寫一個聰明的黑客來讓你的應(yīng)用程序做繁重的工作(你總是可以向用戶發(fā)送虛假的用戶輸入)。
[2]精心設(shè)計的應(yīng)用程序中的GET請求沒有副作用,因此沒有人制作它們將能夠在服務(wù)器上進行更改。您的POST請求應(yīng)始終使用session plus CSRF令牌進行身份驗證,以便只有經(jīng)過身份驗證的用戶才能調(diào)用它們。如果有人對此進行攻擊,則表示他們擁有您的帳戶,并且您想要關(guān)閉該帳戶。
- 3 回答
- 0 關(guān)注
- 532 瀏覽
添加回答
舉報