2015-02-24 74 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并不能保护您免受跨站点脚本攻击