2014-02-16 61 views
1

雖然做一個快速的測試,以檢查針對SQL注入(並不詳盡,只是出於好奇),我輸入爲什麼我會收到HTTP 406錯誤?

「OR 1 = 1

到我的搜索欄和服務器引發我一個406 HTTP錯誤。我覺得很奇怪,並認爲這可能是一個SQL問題,但其他走馬SQL注入測試,如

「或真

,但該網站正常反應,劃定的」。我覺得在這一點上,可以安全地說這不是一個SQL問題,但萬一這裏是PHP消毒代碼

$query = trim(str_replace(array('%', '_'), array('\\%', '\\_'), mysqli_real_escape_string($con, htmlspecialchars($query)))); 

根據快速谷歌搜索(source1source2source3),一個406錯誤當返回的數據類型與HTTP請求標頭不匹配時。我覺得很奇怪,有一個類型不匹配,因爲其他查詢工作得很好。其實

「OR 1 」 OR 1 =

都工作得不錯(即它們正確地轉義) 。定期的搜索結果,即非惡意的搜索結果也會正確返回。有關爲何發生這種情況的任何建議?如果這意味着什麼,我正在使用GoDaddy。

+2

爲什麼哦爲什麼哦爲什麼你要依靠這種專門的消毒「邏輯」,而不是完全通過使用消除問題準備好了嗎? –

+0

現在你提到它,我應該切換到準備好的語句(抱歉,我仍然在學習Web開發..);但我不認爲這是造成問題? –

回答

1

啓用mod_security時,如果檢測到「明顯」SQL注入,則會引發406錯誤。看看你的日誌,它必須這樣說:

的ModSecurity:拒絕訪問代碼爲406 [...] [標籤 「Web攻擊/ SQL注入」]

0

406不可接受
被請求的資源只能根據請求中發送的Accept報頭生成不可接受的內容。

許多網絡服務器(或其擴展)可以檢測到&阻止潛在的SQL注入攻擊。這與你的PHP代碼無關。

1

其實,406的真正含義是:

  • 瀏覽器已要求(例如,「text/html的」)通過在請求中Accept頭一種特殊的響應格式。

  • 服務器說「我不能給你這種格式的回覆」。

要診斷這一點,你需要弄清楚(例如,使用瀏覽器的大小Web開發人員工具)正在請求的,該請求是要什麼你的服務器代碼的一部分(從仔細檢查服務器日誌? )以及爲什麼它沒有(不能)發送請求的響應格式。


UPDATE

它看起來像有一個特定的PHP-回答這個...在PHP是「拉攏」了406響應代碼意味着什麼從計劃的含義不同由HTTP規範編寫者完成。查看其他答案。 (但我的診斷建議應該會引導你在日誌文件中看到這條消息。)

相關問題