- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个在 .NET 4.7.2 上运行的简单 .NET Web 表单应用程序。
此应用程序有一个文本框、一个提交按钮和一个标签。当您单击提交按钮时,应用程序会显示文本框内容。
为了使此应用程序容易受到跨站点脚本攻击,我在其 web.config 中禁用了请求验证 (validateRequest=false)。这允许我在文本字段中输入值:XSS 并提交。
单击“提交”后,我会看到弹出窗口
为了防止 XSS 攻击,我去获取了 AntiXss 库的 NUGet 包,并按照 Microsoft AntiXss document 的说明在我的 web.config 中引用它.
但是,在我对代码中的值进行显式编码之前,没有任何编码,我的网络应用程序仍然容易受到 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 对输出进行编码, 或来自 asp.net 与 <%:
(而不是 <%=
)。这是 html 编码,.Net 默认使用它以前的基于黑名单的方法执行此操作,该方法有一个要编码的字符列表(例如 <
等等),其余的则不用理会。这对于许多用例来说是可以的,但是使用 encoderType="System.Web.Security.AntiXss.AntiXssEncoder"
切换到 AntiXss启用基于白名单的编码器,这意味着它有一个“无害”字符列表,如字母和数字,并对其他所有内容进行编码,这使其在更多场景中更加安全。
不过请注意一些事情。
@myVar
在 Razor 或 <%: myVar %>
在 asp 中很好,并且将被正确编码。它对 html 属性也基本没问题,但在属性中你可能想使用特定的属性编码方法 AntiXssEncoder.HtmlAttributeEncode
.对于 Javascript(在脚本标签中,或在像 on*
这样的事件属性中),你需要 JavascriptEncode
,甚至只有在带引号的字符串中使用它才是安全的(这就是为什么默认情况下它会添加引号)。所以简而言之,没有针对 XSS 的 Elixir 。你不能只在一个地方修复它然后忘记它,如果可能的话,框架可能已经这样做了。您需要在用户输入进入页面的每个地方应用正确的编码。唯一的帮助是,如果你使用正确的输出方法(@
和 <%:
),基本的 html 编码会自动应用,但如上所述,这不适用于 javascript 和某些其他场景(例如编写用户在链接中提供的 url 可能会导致用户能够提供 javascript:alert(1)
- 没有编码会删除它,这很讨厌)。
据此,回答你的明确问题:
@
和<%:
)应用基本的 html 编码。这是基于较旧的标准黑名单还是基于更安全的白名单取决于您是否选择框架中已有的 AntiXss 编码器。关于c# - .NET Framework 4.7 Web 应用程序中的 AntiXSS - 如何应用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65707334/
谁能告诉我这两者的区别?AntiXss.HtmlEncode() 对比 AntiXss.GetSafeHtmlFragment() 最佳答案 HtmlEcode 实际上编码标签: AntiXss.Ht
使用 AntiXss.HtmlEncode 清理我的字段后,有没有办法删除所有 html 元素,因为它们仍然在显示中显示为文字? 最佳答案 不,没有。如果您想删除 HTML 元素,然后对结果进行 Ht
我的公司要求我们的 ASP.NET 代码在发布代码之前通过 Fortify 360 扫描。我们到处都使用 AntiXSS 来清理 HTML 输出。我们还验证输入。不幸的是,他们最近更改了 Fortif
我想在我的网络应用程序中使用 AntiXss 库函数。我有一个 Web 应用程序,其中包含代码隐藏的 Jquery 代码的 asp.net 页面。整个 asp.net 页面通过 Jquery js 页
HttpUtility 类提供编码和解码。但是,当我使用 MS AntiXSS 3.1 库时,我有一套仅用于编码的方法,这是否意味着可以避免解码? 例如 在应用 AntiXSS 之前: lblName
当您可以使用HttpUtility.HtmlEncode简单地对数据进行编码时,我们为什么要使用AntiXss.HtmlEncode? 为什么白名单方法比黑名单方法更好? 另外,在Anti XSS库中
我一直在使用Microsoft's AntiXss Library并想知道其 JavaScriptEncode 方法是否有充分的理由将结果用单引号括起来?这种行为似乎不合常规。 最佳答案 实际上新的3
我有一个简单的论坛应用程序,当有人发布任何内容时,我会: post.Content = Sanitizer.GetSafeHtml(post.Content); 现在,我不确定我是否做错了什么,或者发
我看到网络保护库 (WPL) 带有 2 个不同的选项: 安全运行时引擎 (SRE) 反 XSS 库 第一个看起来很棒,因为不需要代码,它是一个 HTTPModule。第二种需要在代码中手动添加转义逻辑
在我看来,仅使用 html 敏捷包就可以防止 xss(解析然后获取内部文本)。用了hap再用antixss会不会重复? 谢谢,杆。 最佳答案 苹果和橙子。 HTML Agility Pack 是一种解
我想使用新版本的AntiXss来自微软的图书馆。我从 Nuget 包下载了它,但我不确定我应该从这里去哪里。该库没有提供文档,我在网上找到的所有文章都是旧的。由于发生了很多变化,几乎所有我想使用的东西
为什么未使用 Microsoft AntiXSS 清理未关闭的 html 标记? string untrustedHtml = ""; string trustedHtml = AntiXSS.San
这是一个以前被问过的问题,但我没有找到我正在寻找的信息,或者我可能只是错过了这一点,所以请耐心等待。如果我问错了,我总是可以调整我的问题。 例如,如果我有一个 POST 端点,它使用具有 2 个属性(
所以我花了将近 30 分钟寻找 AntiXSS 4.2.1 说明(Microsoft 文档已经过时)并且找不到任何.. 我发现在旧版本中,他们使用,但那已经过时了。 AntiXss.HtmlEncod
Microsoft Web Protection Library (AntiXSS)已达到生命的尽头。该页面指出“在 .NET 4.0 中,框架中包含一个版本的 AntiXSS,可以通过配置启用。在
我不知道我这样做是否正确。 我第一次构建一些东西来防止对页面的攻击。我将从底部开始: 我有属性(property): public string Description {get;set;} 用户可以
我正在使用 AntiXssLibrary 4.0 但它没有转义\x3c。我的错误是什么? 我已根据此处 http://haacked.com/archive/2010/04/06/using-anti
我刚开始使用 AntiXSS (4.3.0),主要是为了使用 @Encoder.JavaScriptEncode如所述here . 我从 Nuget 安装了 AntiXSS,然后添加了 encoder
现在我正在学习网络安全、XSS 等。因为 XSS 基本上是通过注入(inject)一些恶意代码来针对客户端代理(网络浏览器),这些恶意代码由经过身份验证的用户插入时由网络浏览器执行。现在的问题是为什么
我已经阅读了很多关于 XSS 和如何处理的关于 SO 的帖子。通常,共识是白名单而不是黑名单,避免使用正则表达式(太多变体无法处理)。 我正在开发一个 ASP.Net MVC3 应用程序。我需要能够显
我是一名优秀的程序员,十分优秀!