2010-11-26 134 views
1

說我有一個文本框和一個屬性來獲取和設置其值:JavaScript注入攻擊防範的文本框

public SomeText 
{ 
    get { return HttpUtility.HtmlEncode(textBox.Text); } 
    set { textBox.Text = HttpUtility.HtmlEncode(value); } 
} 

我已經使用的HTMLEncode防止JavaScript注入攻擊。想到它後,雖然我想我只需要在getter上的HtmlEncode。 setter僅由系統使用,不能由外部用戶訪問。

這是正確的嗎?

回答

0

是的。您只需編碼您從用戶接受的字符串,並且必須在頁面內顯示。

3

幾點;

第一:

那麼當您顯示它們,而不是任何其他時候真的只有編碼值。通過對它們進行編碼,您可以從盒子中獲得價值,並且在粘貼時也可以最終得到一個真正的混亂,只要有人編輯這些值,情況就會變得越來越糟糕。在大多數情況下,在保存到數據庫時,不應對值進行編碼(針對HTML/Javascript注入 - 當然,您需要防止SQL注入),特別是如果稍後可以編輯該值。在這種情況下,你實際上需要解碼它在加載它後...不是編碼它再次。但是,再次;顯示它的時候(包括顯示用於編輯,順便說一句)

其次,它的簡單得多隻編碼:

HtmlEncode防止注入HTML - 這可以包括<script>塊,將運行JavaScript,真的。但是這也可以防止通常與Javascript無關的惡意HTML。但是防止Javascript注入幾乎是另一回事;也就是說,如果您可能曾經顯示過某個用戶輸入的內容,例如javascript alert('%VARIABLE');,那麼您必須進行一種完全不同的編碼,而不是您正在執行的操作。