我正在使用的項目,使用AJAX調用頁面上的每個鏈接,更具體地說,除了登錄以外,提交的每個表單都通過AJAX提交,並且在那裏有點json和xml,我的問題是,這有什麼安全風險?所有的服務器端代碼都是PHP,並且所有內容都正確轉義。Ajax安全問題和可能的攻擊
回答
AJAX中沒有特定的東西。這只是您的瀏覽器執行的請求。這只是一般的HTTP請求,應該像其他任何HTTP請求一樣保護,無論其XHR性質如何。
AJAX請求攜帶證件,因此向Ajax開放服務可能也會向XSRF開放它們。 – 2011-05-20 02:46:25
@Mike Samuel:呃,什麼?! Ajax請求不比「正常」請求更脆弱,僅僅是因爲**它是相同的事情**。順便說一句,感謝downvote。等待你的證明。 – zerkms 2011-05-20 02:47:28
@zerkms,https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project列出XSRF爲5號的OP的環境是PHP的服務器上,JS在客戶端通過Ajax提交的所有數據上。 OP規定,他們妥善逃生,防止客戶遭到破壞。那是什麼留下的?服務器權限被濫用。因此,直到/除非服務器需要XSRF令牌並且所有承擔AJAX呼叫的權限都提供這些令牌,否則它們仍然容易受到XSS的影響。 – 2011-05-20 04:14:41
人們普遍認爲,沒有必要使用XSRF標記來保護僅通過GET公開數據並通過cookie授權用戶的服務。
這是不正確的。當輸出是JSON數組時,這些漏洞通常具有AJAX特定的XSSI漏洞。
考慮一個服務/getfriends
,返回數據如[ { "name": "Alice" }, { "name": "Bob" } ]
。
一個攻擊頁面可以做
<script>
var stolenData;
var RealArray = Array;
Array = function() {
return stolenData = new RealArray();
};
</script>
<script src="https://naivedomain.com/getfriends" type="text/javascript"></script>
和第二<script>
標籤加載的JSON跨域與用戶的cookie 因爲ECMAScript中3怪癖(固定的EcmaScript 5.0和現代ES 3口譯)該頁面可能會讀取被盜數據,因爲JavaScript解析器在解析JSON響應中的[...]
時調用了重寫的Array
構造函數。
除了普通的基於cookie的方法之外,通過XSRF令牌保護這些服務解決了問題,如不允許GET,通過自定義頭進行授權以及包含解析斷言器。解析斷言者通過使響應無效的JSON工作,例如返回throw 0; [{ "name": "Alice" }, { "name": "Bob" }]
,因此XHR客戶端可以剝離throw 0;
前綴,但通過<script>
加載的客戶端不能。
最後,由於JavaScript解析器將加載的腳本解析爲程序,因此這僅影響返回JSON數組的服務。返回{ "names": ["Alice", "Bob"] }
的/getfriend
服務將不會受到攻擊,因爲該內容不是有效的程序 - 它被解析爲具有無效標籤的塊。但是像{ names: [ "Alice", "Bob" ] }
這樣的無效JSON很脆弱,因爲這是一個有效的程序。
哦,酷,從來不知道,甚至不相信它會工作:-S – zerkms 2011-05-21 01:10:15
@zerkms,允許這種規範語言是在11.1節。4讀取「生產ArrayLiteral:[Elisionopt ]」的數組初始化程序的計算方法如下: 1.讓數組成爲創建新對象的結果,就像通過表達式new Array()一樣,但是在EcmaScript 5讀取「讓數組成爲創建一個新對象的結果,就好像使用'new Array()'表達式一樣,其中'Array'是具有該名稱的標準內置構造函數。 – 2011-05-21 02:27:36
@zerkms,請參閱http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx以獲得更好的文章。 – 2011-05-21 02:33:21
Ajax違反有關POST數據中保留字符轉義百分比的安全規則。純粹而簡單,這允許將敵對代碼直接注入到SQL模式中,這可以是諸如PHP代碼之類的東西,用於稍後在主機上檢索和執行。直到AJAX開始轉義所有保留的GET和POST字符,正如普通瀏覽器對錶單所做的那樣,在沒有完全掃描每個惡意代碼段的通信的情況下,它不會被信任。
- 1. 可能的安全攻擊
- 2. PHP和AJAX安全問題
- 3. AJAX安全問題
- 4. Ajax安全問題
- 5. AJAX安全問題
- 6. 可能的攻擊
- 7. 使MVC應用程序對ajax和其他攻擊安全
- 8. AJAX驗證沒有DoS攻擊可能
- 9. Ajax安全問題:jQuery ajax()+ PHP scandir()=安全問題?
- 10. Django和Ajax的安全問題
- 11. AJAX PHP的安全問題
- 12. PHP可能存在的安全問題
- 13. 會議和可能的黑客攻擊
- 14. Ajax處理 - 安全問題
- 15. jquery ajax - 安全問題
- 16. jquery Ajax安全問題
- 17. AJAX XSS攻擊和.Net MVC
- 18. 可能的DDoS攻擊?
- 19. 可能的攻擊autoshell.txt
- 20. php可能的攻擊?
- 21. 安全 - 某種類型的jQuery攻擊?
- 22. StreamReader線程安全問題?可能?
- 23. MYSQL二階攻擊問題
- 24. Bodysnatcher「OpenId Provider」攻擊問題
- 25. 攻擊力框架問題
- 26. AS3攻擊動畫問題
- 27. CheckMarx XSRF攻擊問題
- 28. ScriptResource.axd攻擊有可能嗎?
- 29. '&'角色是否對xss攻擊安全?
- 30. href安全,防止xss攻擊
數據使用GET或POST發送? – Tadeck 2011-05-20 01:22:39
如何檢查ajax請求是否來自經過身份驗證的用戶? (並沒有欺騙) – Mel 2011-05-20 01:24:48
@Tadeck:這有什麼關係嗎? – zerkms 2011-05-20 01:25:11