我正在对我的网站进行xss-proof for javascript和xss攻击。它是用ASP.NET Webforms编写的。
我要测试的主要部分是一个用户控件,它有一个文本框(附加了tinyMCE)。
用户可以通过在此文本框中书写来向网站提交故事。我必须将validateRequest
设置为false,因为我想在HMTL(tinyMCE)中获取用户的故事。
我应该如何防止javascript-xss攻击?由于用户的故事是HMTL文本,我不能在他们的故事中使用Server.HtmlEncode
。一般来说,从用户接收HTML内容,保存然后将其显示给用户的安全方法是什么?
如果一个用户将恶意代码放入文本框并提交,则是否有可能会损害查看该文本的其他人?
感谢。
答案 0 :(得分:4)
如果你不清理用户放在文本框中的内容并提交,那么是的,有可能造成伤害。
您可能需要查看Microsoft Anti-Cross Site Scripting Library,因为它旨在帮助开发人员防止此类攻击。
另外值得一看的是OWASP的Cross-site Scripting (XSS)
您可能还想查看HttpUtility.HtmlEncode和HttpUtility.HtmlDecode。我刚刚写了一个快速测试,看起来它可能会在下面的评论中解决您的问题(关于如何以正确的格式向其他用户显示数据):
string htmlString = "<b>This is a test string</b><script>alert(\"alert!\")</script> and some other text with markup <ol><li>1234235</li></ol>";
string encodedString = HttpUtility.HtmlEncode(htmlString);
// result = <b>This is a test string</b><script>alert("alert!")</script> and some other text with markup <ol><li>1234235</li></ol>
string decodedString = HttpUtility.HtmlDecode(encodedString);
// result = <b>This is a test string</b><script>alert("alert!")</script> and some other text with markup <ol><li>1234235</li></ol>
ASP.NET控件和HTMLEncode 我打算发布我班上的信息,但是我找到了一个列出完全相同的链接(1.1和2.0),所以我会发布链接以便于参考。您可以通过查看MSDN获得有关未列出的特定控件(或3.0 / 3.5 / 4.0版本,如果它们已更改)的更多信息,但这至少应该作为快速入门指南。如果您需要更多信息,请告诉我,我会看到我能找到的信息。
ASP.NET Controls Default HTML Encoding
以下是来自某个MSDN博客的更全面的列表:Which ASP.NET Controls Automatically Encodes?
答案 1 :(得分:3)
我会将其编码存储在数据库中,然后在显示解码时,如果您说需要保留其他内容,则只用<
替换<
。
据我所知,如果你替换<
XSS实际上是不可能的,因为任何JS代码都必须在<script>
标签中执行并通过替换,你会得到这个HTML源代码:
<script>
,用户将在屏幕上看到<script>
,因为浏览器将解析<
实体。
这就是说,如果您允许用户发布“原始”HTML,例如<b>this section is bolded</b>
然后您必须创建允许标记的“白名单”,然后手动将<
替换为正确的HTML,例如:
string[] allowedTags = new string[] { "a", "b", "img" };
foreach (allowedTag in allowedTags)
output = output.Replace("<" + allowedTag, "<" + allowedTag);
答案 2 :(得分:1)
您是否看过OWASP guide on this
最好的方法是拥有一个允许标记的白名单,而不是试图想出一种方法来阻止所有脚本标记。
关于如何执行此操作的一个解决方案是How do I filter all HTML tags except a certain whitelist? 但您还需要注意,人们可能通过带有自己服务器URL的图像标记链接到外部脚本。请参阅此处http://ha.ckers.org/xss.html中您需要防范的不同类型攻击的示例