2012-04-24 42 views
3

我在響應頭中直接傳遞用戶定義的參數。我學到的並不是一個好主意,因爲用戶可以操縱標題,並且可能導致跨站點腳本攻擊和其他多種攻擊。java中的響應頭驗證

https://www.fortify.com/vulncat/en/vulncat/python/header_manipulation.html

我在做什麼,以防止這是通過更換「\ r」和空字符串「\ n」個字符「」確認爲「HTTP響應拆分」的用戶輸入。這是足夠的還是我必須檢查其他角色也。任何指針都會有很大的幫助。

這是我的代碼。

if(response != null) 
    { 
    newResponse = response.replaceAll("[\r\n]", ""); 
    } 

這足以防止這種攻擊或我也應該驗證其他字符。

回答

3

白名單比黑名單安全得多。您是否可以使用白名單取決於您對用戶定義參數的瞭解程度。

這裏更多:

http://cwe.mitre.org/data/definitions/113.html

+0

+1到白名單。指定*被允許的字符。不要以爲你對所有可能的攻擊媒介和利用方案有足夠的瞭解,以便你可以枚舉和禁止所有可能的惡意字符串/字符。總會有一個你沒有想到的,尤其是在unicode世界 - 甚至格式錯誤的unicode代碼點。 – Cheekysoft 2012-04-24 08:48:31

+0

是白名單是好方法。我在響應中傳遞了一個文件名。 我已經改變了我的正則表達式。 if(response!= null) {newResponse = response.replaceAll(「[^ \\\ __a-zA-Z0-9-.//」,「」); } @artbristol感謝您的幫助。 – 2012-04-24 12:32:36

0

您提供的信息不足以提供正確的答案。我們需要知道你對參數值做了什麼,以便判斷你的行爲是否足夠好,以及你的代碼運行在什麼樣的環境中。一個簡短的100%正確(但非常沒用)的答案是「沒有。」

安全性不是通過在原始上下文之外採取以下簡單的項目符號來實現的。你從Python上下文中取出它並直接放到Java上下文中。您必須瞭解您的環境以及您的代碼完全執行的操作。沒有銀彈。

+0

誤解了這個問題的一部分,從而去除不相關的評論。 – Torben 2012-04-24 08:20:26

+0

弗雷德布魯克斯那裏很好的參考... – SyntaxRules 2013-05-29 21:18:10