2009-10-27 82 views

回答

3

不幸的不是。如果攻擊者真的在嘗試,實際上有很多方法可以潛入該正則表達式。使用現代瀏覽器,該正則表達式應該做得很好,但並不完全。例如,沿此線的東西可以打開的JavaScript但沒有明確說腳本或JavaScript

<img src="blah.jpg" alt="" onmousedown="alert('a')" /> 

退房here(有些過時,但跨獲取點)和here更多的例子

+0

打算提一下,但上面鏈接到http://www.owasp.org/index.php/XSS%5F%28Cross%5FSite%5FScripting%29%5FPrevention%5FCheat%5FSheet做得很好 - 即使CSS可以成爲XSS的來源。這麼多的攻擊媒介。 – 2009-10-27 01:11:45

+0

是的,很好的鏈接。 – 2009-10-27 01:19:16

+0

感謝您的來源和簡單的例子。 – bucabay 2009-10-27 01:25:41

0

這是正則表達式足以捕捉所有跨站點腳本嘗試

Hahahahahahahahahaha。

對不起。但是,真的......不,這不是冰山一角。

丹尼爾提到了另一種注入腳本的方法,但實際上有數百個。使用簡單的正則表達式來清理HTML是完全不可能的。唯一的方法(即使不是微不足道的)是正確解析HTML,拋出所有格式錯誤的序列和元素/屬性名稱,除了一些已知安全的名稱。

當然,這隻適用於您實際上故意接受HTML輸入並且想限制其潛在危害。如果情況是您接受文本,但忘記在出口​​時正確轉義文本,則需要修復該HTML轉義,因爲沒有大量的輸入嗅探將修復輸出問題。

這就是爲什麼mod_security完全是僞造的。它通過捕捉一些最基本的注入技巧,讓所有其他東西通向易受攻擊的應用程序,從而爲您提供改進安全性的幻覺。最終,它不會阻止你被黑客入侵,但是你添加的注入簽名越多,它就越會拒絕並混淆合法請求。例如,它可能會阻止我輸入此消息,因爲它包含字符串<script>

+0

大聲笑..也許你是正則表達式只是不達標:D我明白你的觀點。 – bucabay 2009-10-28 07:51:39

0

其他受訪者是正確的:有許多情況下可能發生注射。請記住,解決方案必須考慮可能發生注入的許多上下文。黑名單(或「已知不好」)過濾方法將無法正常工作,因爲它們會受到攻擊,這些攻擊使用意外的字符集編碼注入,創造性地使用空白以及其他技術。欲瞭解更多信息,請參閱OWASP DOM Based XSS。該頁面的鏈接教育'問題'方面。

至於解決方案,請考慮我們剛發佈的OWASP XSS DOM Prevention Cheat Sheet。在備忘單中引用了幾個工具包,可幫助您實施轉義或編碼策略。可能MY FAVORITE確保編寫服務器編寫的客戶端代碼並妥善轉義的方法是JXT。從谷歌代碼頁:

<!-- Automatically escaped content --> 
Hello ${user.getName()}! 

<!-- Example tag with 3 different contextual encoding requirements --> 
<img src="/profile-photo?user=${user.getId()}" 
    alt="Photo of ${user.getName()}" 
    onclick="openProfile('${user.getId()}')" /> 

<!-- Override the default escape, rare, but occasionally needed: --> 
<jxt:out value="${user.getProfileHtml()}" escape="none"/> 

注意它包括自動轉義爲背景也是一個自定義標籤,允許非轉義輸出,在你的頁面的情況下,特殊元素/應用程序將通過車被打破漂白編碼機制。