0

我试图避免在我的应用程序中使用横向脚本,但我的要求是我必须将包括脚本在内的数据保存到我的数据库中,但是当显示相同的数据时,它应该作为文本而不是脚本可见,例如:

第1步:我在一个网站中有一个文本框,我试图通过下面的代码注入

测试数据警报('恶意代码');

第 2 步:我将文本的确切内容保存在我的数据库中(注意 validateRequest 设置为 false)。

第3步:然后我在网页中显示脚本不应该执行的内容。

注意:我已经通过 AntiXss 和 Sanitizer 对其进行了限制,但是当我使用 Sanitizer 时,脚本会被 Sanitizer 忽略,谁能给我一个解决方案,将脚本显示为文本(也应该避免执行脚本.)

4

1 回答 1

2

在你的情况下,

“他们不应该一起工作”。您将您的 asp.net 验证与危险输入相冲突(尽管它来自 antixss 库)。

Validate Request = "true"是 ASP.Net 的安全机制。它旨在通过过滤(使用启发式或白名单,我不确定)输入中的潜在危险标签来保护您免受 XSS 攻击。例如,如果您创建一个 ASP.Net 应用程序,Validate Request = "true"并且当您尝试输入查询字符串参数时,例如

SaveProduct.aspx?q=<script>alert(1);</script>

,您将得到“从客户端检测到潜在危险的 Request.Form 值.. blah blah blah ”。这就是 Validate Request = "true" 的作用,可以在页面级别或 web.config 中设置。

现在,使用 antixss 库的重点是当您遇到像现在这样的情况时 - 接受用户输入(具有潜在危险的输入),将其保存在某处,然后将其显示给用户 - 您需要关闭ASP.Net 的验证请求。通过这样做,您是在告诉 ASP.Net 将 Web 应用程序的安全性留给您。你负责处理 XSS 漏洞,而不是 ASP.Net。在保存到数据库时,使用 antixss 的GetSafeHtmlFragment()方法来清理您的输入。另请注意,antixss 版本 4.2.1 以严格转义而闻名

在向有漏洞的用户显示内容时,您必须将其 HTML 编码到上下文中。例如,如果您要在 javascript、css 或 html 中输出具有潜在危险的字符串,则必须根据 javascript、css 或 html 编码对其进行编码。更多信息 - AntiXss.HtmlEncode 和 HttpUtility.HtmlEncode 有什么区别?

我建议您使用 antixss 库 html 编码来评估您的选择。但是您的解决方案是关闭验证请求。在保存到数据库之前使用 antixss(我更喜欢 Html Agility pack),并HtmlEncode()在页面的 html 上下文中显示之前使用。Rick Strahl 在这里有一个带有 Html Agility Pack 的示例实现 - http://weblog.west-wind.com/posts/2012/Jul/19/NET-HTML-Sanitation-for-rich-HTML-Input

请务必通读以下问题,以获得扎实的理解和正确的实施。

于 2014-01-04T08:48:38.063 回答