繁体   English   中英

防止 Javascript 和 XSS 攻击

[英]Preventing Javascript and XSS attacks

我正在为 javascript 和 xss 攻击对我的 web 站点进行 xss 验证。 它是用 ASP.NET Webforms 编写的。

我想测试的主要部分是一个带有文本框的用户控件(附加到它的tinyMCE)。

用户可以通过在此文本框中写入来将故事提交到站点。 我必须将validateRequest设置为 false,因为我想在 HMTL(tinyMCE)中获取用户的故事。

我应该如何防止 javascript-xss 攻击? 由于用户的故事是 HMTL 文本,我不能在他们的故事上使用Server.HtmlEncode 一般来说,从用户那里接收 HTML 内容,保存然后显示给用户的安全方法是什么?

如果一个用户将恶意代码放入文本框中并提交,是否有可能伤害查看该文本的其他人?
谢谢。

如果您不清理用户在文本框中输入并提交的内容,那么是的,有可能造成伤害。

您可能想查看Microsoft Anti-Cross Site Scripting Library ,因为它旨在帮助开发人员防止此类攻击。

另外值得一看的是 OWASP 的跨站脚本 (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 = &lt;b&gt;This is a test string&lt;/b&gt;&lt;script&gt;alert(&quot;alert!&quot;)&lt;/script&gt; and some other text with markup &lt;ol&gt;&lt;li&gt;1234235&lt;/li&gt;&lt;/ol&gt;

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我打算发布我从 class 获得的信息,但我找到了一个链接,其中列出了完全相同的内容(对于 1.1 和 2.0),所以我将发布链接以便于参考。 通过查看 MSDN,您可能可以获得有关未列出的特定控件(或 3.0/3.5/4.0 版本,如果它们已更改)的更多信息,但这至少可以作为您的快速入门指南。 如果您需要更多信息,请告诉我,我会看看我能找到什么。

ASP.NET 控制默认 HTML 编码

以下是来自 MSDN 博客之一的更全面的列表: 哪些 ASP.NET 控件自动编码?

我会 go 将其编码存储在数据库中,然后在显示解码时仅将<替换为&lt; 如果你说你需要保留其他东西。

据我所知,如果您替换< XSS 是不可能的,因为任何 JS 代码必须在要执行的<script>标记内,并且通过替换,您将在 HTML 源代码中得到这个: &lt;script>和用户将在屏幕上看到<script> ,因为浏览器将解析&lt; 实体。

这就是说,如果您允许用户发布“原始”HTML,例如<b>this section is bolded</b> ,那么您必须创建允许标签的“白名单”,然后手动替换&lt; 使用正确的 HTML 例如:

string[] allowedTags = new string[] { "a", "b", "img" };
foreach (allowedTag in allowedTags)
   output = output.Replace("&lt;" + allowedTag, "<" + allowedTag);

你看过关于这方面的 OWASP 指南

最好的方法是拥有一个允许标签的白名单,而不是试图想出一种方法来阻止所有脚本标签。

关于如何做到这一点的一种解决方案是这里如何过滤除某个白名单之外的所有 HTML 标签? 但是您还需要注意,人们可能通过带有 URL 的图像标签将外部脚本链接到他们自己的服务器。 请参阅此处的示例http://ha.ckers.org/xss.html您需要防御的不同类型的攻击

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM