![](/img/trans.png)
[英]How to install .Net Framework 4.7 with clickonce/bootstrapper?
[英]AntiXSS in .NET Framework 4.7 web application - how to apply it
我创建了一个简单的 .NET web 表单应用程序,它在 .NET 4.7.2 上运行。
此应用程序有一个文本框、一个提交按钮和一个 label。当您单击提交按钮时,应用程序会显示文本框内容。
为了使此应用程序容易受到跨站点脚本攻击,我在其 web.config 中禁用了请求验证 (validateRequest=false)。 这允许我在文本字段中输入值:XSS<img src=x onerror=confirm("HACKED")> 并提交。
单击提交后,我看到弹出窗口
为了防止 XSS 攻击,我去获取了 AntiXss 库的 NUGet package 并按照Microsoft AntiXss 文档中的说明在我的 web.config 中引用它。
但是,在我明确编码我的代码中的值之前,没有任何编码并且我的 web 应用程序仍然容易受到 XSS 攻击。
protected void Button1_Click(object sender, EventArgs e)
{
//Label1.Text = TextBox1.Text;
Label1.Text = AntiXssEncoder.HtmlEncode(TextBox1.Text,true);
}
通过使用 AntiXss 库编码的值,应用程序现在显示该值而不是执行该脚本并创建弹出窗口。
所以我有三个问题:
好的,首先,从 .Net 4.5 开始,(大部分)AntiXSS 库是框架本身的一部分,它位于System.Web.Security.AntiXss
中,您不需要单独提供 dll。
默认情况下,当使用@
从 Razor 写入时,框架 html 编码为 output,或者使用<%:
(而不是<%=
)从 asp.net 写入。 它所做的是 html 编码,.Net 默认使用它以前的基于黑名单的方法执行此操作,该方法有一个要编码的字符列表(例如<
等),并且单独留下 rest。这对许多用例,但是使用encoderType="System.Web.Security.AntiXss.AntiXssEncoder"
切换到 AntiXss 启用基于白名单的编码器,这意味着它有一个“无害”字符列表,如字母和数字,并对其他所有字符进行编码,这使得它在更多场景中更安全。
不过请注意一些事情。
@myVar
或在 asp 中使用<%: myVar %>
就可以了,并且将被正确编码。 对于 html 属性也基本没问题,但在属性中您可能希望使用特定的属性编码方法AntiXssEncoder.HtmlAttributeEncode
。 对于 Javascript(在脚本标记中,或在on*
之类的事件属性中),您需要JavascriptEncode
,甚至只有在带引号的字符串中使用它才是安全的(这就是默认情况下添加引号的原因)。 所以简而言之,没有针对 XSS 的灵丹妙药。 你不能只在一个地方修复它然后忘记它,如果可能的话,框架可能已经这样做了。 您需要在用户输入进入页面的每个地方应用正确的编码。 唯一的帮助是,如果您使用正确的 output 方法( @
和<%:
:),将自动应用基本的 html 编码,但如上所述,这不适用于 javascript 和某些其他场景(例如编写用户提供的链接中的 url 可能会导致用户能够提供javascript:alert(1)
- 没有编码会删除它,这很讨厌)。
基于此,回答您的明确问题:
@
和<%:
)应用基本的 html 编码。 这是基于较旧的标准黑名单,还是基于更安全的白名单取决于您 select AntiXss 编码器是否已经在框架中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.