2015-02-24 75 views
1

只是一個簡短的問題,我被要求通過一個VB應用程序,並修復所有可能發生跨站點腳本的地方。我將<%=更改爲<%:以及他們在代碼中將html放在一起的任何地方,並相應地將一個字符串注入server.htmlencode或server.urlencode。我的問題是有時他們使用的是htmlwriter。我假設他們是否使用htmlwriter,我不需要擔心跨站點腳本,因爲作者會自動編碼任何字符串。那是對的嗎?htmltextwriter和跨站點腳本

回答

3

是的,它在寫入HTML文檔時確保您不受XSS影響,但必須使用HtmlTextWriter.WriteEncodedText方法。

' Assign a value to a string variable, 
' encode it, and write it to a page. 
colHeads = "<custID> & <invoice#>" 
writer.WriteEncodedText(colHeads) 
writer.WriteBreak() 

將輸出

&lt;custID&gt; &amp; &lt;invoice#&gt; 

到流。

請注意,使用<%:WriteEncodedText只適合輸出到HTML上下文。

<script> 
var myVariable = '<%: thisIsWrong %>'; 
</script> 

在此背景下HttpUtility.JavaScriptStringEncode應使用(與<%= %>支架,以防止不正確的HTML編碼過):他們應該被輸出到JavaScript時使用。這個功能也正確地將特殊字符編碼,因此,如果</script>是在腳本標籤被渲染,企圖關閉HTML腳本標籤準備XSS攻擊,它會被渲染爲:

\u003c/script\u003e 

這是正確的JavaScript編碼將其理解爲</script>,但沒有將瀏覽器解釋爲文字結尾腳本標記。一些天真寫入的JavaScript編碼例程不會將其轉換,因爲該序列不包含\,"'字符。我只是想我會提到一些阻止XSS的其他人找到這篇文章的細微差別。

如果不確保關閉腳本標籤沒有被渲染,那麼像這樣的攻擊是可能的

</script><script>alert(1)</script> 

其在瀏覽器中呈現爲

<script type="text/javascript"> 

alert('</script><script>alert(1)</script>'); 

</script> 

和瀏覽器將解釋腳本標籤結尾爲alert('</script>,並簡單地執行新腳本標籤中的內容。

隨着JavaScriptStringEncode功能,因爲它呈現,因爲這是安全的:

<script type="text/javascript"> 

alert('\u003c/script\u003e\u003cscript\u003ealert(1)\u003c/script\u003e'); 

</script> 

不包含</script>的瀏覽器來解釋。

0

剛剛試了一下遺憾的是它不保護你免受跨站點腳本我做了一個aspx頁面,並在後面的代碼我把

我跑了頁面和JavaScript警告彈出,所以我猜的HtmlTextWriter並不能保護您免受跨站點腳本攻擊