【发布时间】:2015-07-09 09:03:23
【问题描述】:
根据OWASP XSS page,需要针对不同的上下文使用不同的 XSS 保护技术。但是,在 ASP.NET MVC Razor 视图中,我们只有 @ 符号来转义 HTML 元素内部内容上下文中的数据。 HTML 属性、CSS、javascript 上下文等呢?
HTML 元素内容
这是安全的,可以按预期工作:
<div>@data</data>
HTML 元素属性
这是不安全的,可以被利用:
<div style="background: @color"></div>
JavaScript
虽然这不安全:
<script>
var value = @value;
</script>
安全的解决方案是:
<script>
var value = @Json.Encode(value);
</script>
CSS
这是不安全的,可以被利用:
<style>
.box { background : @color; }
</style>
【问题讨论】:
-
当他们说“上下文”时,他们并不是在谈论 Razor。Razor 只是生成 HTML。 @ 标记内的任何内容都不会在客户端上呈现(除非它是为此而设计的特定函数)。
-
这个? wpl.codeplex.com
-
@D.Rosado 是的,AntiXSS 似乎是一个解决方案,但是“在 .NET 4.0 中,框架中包含一个版本的 AntiXSS 并且可以通过配置启用。在 ASP.NET v5 中基于白名单的编码器将是唯一的编码器”?
-
@AlexPolyankin 嘿。只是好奇你在寻找什么答案......也许我可以进一步详细说明?
-
@Gray 我已经用一些例子更新了我的答案。 AFAIK HTML 属性和 CSS 属性是这里唯一可能的漏洞。我想获得推荐和生产就绪的解决方案。我不是安全专家,但我认为在值周围使用引号并不是 100% 安全的,并且可以被利用。
标签: asp.net-mvc xss