2011-05-29 37 views
-1

當前項目中的每個文本字段都是普通平面文本,沒有ubb或html標籤。 但是它必須是unicode,所以支持字符的數組並不是最優的,我猜。防止XSS的輕量級和安全方式

我知道有很多專用類XSS檢測的,但是不是所有的XSS包括這2個字:

的燒烤<

< 
%3C 
&lt 
&#60; 
&60; 
&#x3C; 
PA== 

的燒烤;

; 
%3B 
&#x3B; 
&#59 
Ow== 
&59; 

如果我爲您在上面的代碼塊中的字符所有用戶輸入(GET,POST,餅乾),那麼一切都應該是100%安全嗎? 該項目沒有運行在MySQL上,它使用cassandra所以mysql注入應該不成問題。

我確定我忘記了一些東西,但我不知道是什麼...... 或者當userinput是平面文本時,構建100%安全的應用程序真的很容易嗎?

編輯: 列表更長都有點,發現一個用於第一個字符的位置: http://ha.ckers.org/xss.html

< 
    %3C 
    &lt 
    &lt; 
    &LT 
    &LT; 
    &#60 
    &#060 
    &#0060 
    &#00060 
    &#000060 
    &#0000060 
    &#60; 
    &#060; 
    &#0060; 
    &#00060; 
    &#000060; 
    &#0000060; 
    &#x3c 
    &#x03c 
    &#x003c 
    &#x0003c 
    &#x00003c 
    &#x000003c 
    &#x3c; 
    &#x03c; 
    &#x003c; 
    &#x0003c; 
    &#x00003c; 
    &#x000003c; 
    &#X3c 
    &#X03c 
    &#X003c 
    &#X0003c 
    &#X00003c 
    &#X000003c 
    &#X3c; 
    &#X03c; 
    &#X003c; 
    &#X0003c; 
    &#X00003c; 
    &#X000003c; 
    &#x3C 
    &#x03C 
    &#x003C 
    &#x0003C 
    &#x00003C 
    &#x000003C 
    &#x3C; 
    &#x03C; 
    &#x003C; 
    &#x0003C; 
    &#x00003C; 
    &#x000003C; 
    &#X3C 
    &#X03C 
    &#X003C 
    &#X0003C 
    &#X00003C 
    &#X000003C 
    &#X3C; 
    &#X03C; 
    &#X003C; 
    &#X0003C; 
    &#X00003C; 
    &#X000003C; 
    \x3c 
    \x3C 
    \u003c 
    \u003C 
+0

你想*檢測*或*防止* XSS? – rid 2011-05-29 22:15:34

+0

哦...只需使用'htmlspecialchars'。 – 2011-05-29 22:20:04

回答

2

嘗試在輸入中覆蓋「禁止」惡意字符並沒有意義,甚至更少的嘗試禁止以各種不同形式編碼的版本。你會誤報並阻止有效的輸入,同時不能保護自己免受任何形式的注入漏洞的影響。我不知道你試圖通過禁止Ow== 而不是,例如&"來阻止什麼樣的攻擊。

停止HTML注入的正確方法是對輸出到HTML頁面的任何文本字符串調用htmlspecialchars()。停止URL組件注入的正確方法是在輸出到URL中的文本字符串上調用rawurlencode()。停止SQL注入的正確方法是調用相關的數據庫轉義函數(例如mysql_real_escape_chars())將任何文本輸出到SQL字符串文字中。

等等,對於每個不同的逃避你可能會遇到。關鍵是,這是一個輸出級別的函數,必須在將文本放入新的上下文中時使用,並使用正確的函數來處理上下文類型。在輸入階段你不能做一次,然後忘記,因爲在輸入階段你不知道你正在處理的文本是否會以SQL文本,HTML頁面,JavaScript字符串結束文字,URL參數或什麼。

這並不是說輸入階段驗證是無用的;你會希望它確保提交的應該是數字的字段確實看起來像一個數字,或者一個日期,或者其他什麼。但是,輸入驗證不是解決輸出轉義問題(如導致大多數XSS的HTML注入問題)的解決方案。爲了完成這項工作,你必須禁止所有標點符號,這是非常用戶友好的。

1

但不是所有的XSS包括這2個字符:(...) <和&]

不,他們不...作爲cheat sheet您鏈接到會建議。例如(MG嵌入式命令第二部分)

Redirect 302 /a.jpg http://victimsite.com/admin.asp&deleteuser 

真有那麼容易建立100%安全的應用程序時,userinput是平面的文字?

讓我們說這很簡單。你仍然需要擔心SQL注入,XSS(其中少了一些,但是it's still potentially around有一絲不當的數據)和CSRF。