首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >防止Javascript和XSS攻击

防止Javascript和XSS攻击
EN

Stack Overflow用户
提问于 2011-07-10 15:32:48
回答 3查看 5.8K关注 0票数 6

我正在对我的网站进行防xss攻击,防止javascript和xss攻击。它是用ASP.NET Webforms编写的。

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

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

如何防止javascript-xss攻击?因为用户的故事是HMTL文本,所以我不能对他们的故事使用Server.HtmlEncode。一般来说,从用户接收HTML内容、保存并显示给用户的安全方法是什么?

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

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-10 15:40:52

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

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

同样值得一看的是OWASP的Cross-site Scripting (XSS)

您可能还想研究一下HttpUtility.HtmlEncode和HttpUtility.HtmlDecode。我刚刚写了一个快速测试,看起来它可能会在下面的评论中解决您的担忧(关于如何以正确的格式向其他用户显示数据):

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

ASP.NET Controls Default HTML Encoding

以下是来自MSDN博客之一的更全面的列表:Which ASP.NET Controls Automatically Encodes?

票数 4
EN

Stack Overflow用户

发布于 2011-07-10 15:49:15

我会去存储它编码在数据库中,然后当显示解码它,如果你说你需要保留其他东西,只用&lt;替换<

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

这就是说,如果你允许用户发布“原始”超文本标记语言,比如<b>this section is bolded</b>,那么你必须创建允许标记的“白名单”,然后手动用适当的超文本标记语言替换&lt;,例如:

代码语言:javascript
运行
复制
string[] allowedTags = new string[] { "a", "b", "img" };
foreach (allowedTag in allowedTags)
   output = output.Replace("&lt;" + allowedTag, "<" + allowedTag);
票数 3
EN

Stack Overflow用户

发布于 2011-07-10 15:58:01

你看过OWASP guide on this吗?

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

如何做到这一点的一个解决方案是在这里How do I filter all HTML tags except a certain whitelist?,但你也需要知道,人们可能有一个链接到外部脚本通过一个图像标签与一个网址到他们自己的服务器。请参阅此处的示例http://ha.ckers.org/xss.html,了解您需要防御的不同类型的攻击

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6639859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档