我最近注意到我的应用程序中有一个很大的漏洞,因为我做过类似的事情:
<input type="text" value="<%= value%>" />
我知道我应该使用Html.Encode
,但有没有办法为所有值做到这一点,而不必明确地做到这一点?
答案 0 :(得分:22)
有几种方法:
<%: %>
语法。 (这只是Html.Encode()
)的语法糖答案 1 :(得分:9)
观看Scott Hanselman和Phil Haack的video。它们涵盖了XSS,CSRF,JSON Hijacking,特别是ASP.Net MVC。
答案 2 :(得分:7)
在ASP.Net 4.0或更高版本中,始终使用&lt;%:...%&gt;而不是&lt;%= ...%&gt; ...它为您编写HTML编码。
完成此操作后,作为安全预防措施,为&lt;%=定期grep您的代码非常简单。
另外,您使用的是Microsoft Anti-XSS library吗?
答案 3 :(得分:2)
HTML编码的语法
&lt;%:model.something%&gt; WebForms中的语法
它在Razor中是自动的,即@ model.something会自动自动编码 需要做任何事情来编码。
MVC3 HTML Helper方法自动返回编码的字符串。例如Html.Label将返回编码的字符串
有关跨站点脚本的更多信息
http://thirum.wordpress.com/2013/10/24/how-asp-net-mvc-prevents-cross-site-scriptingxss-attack/
答案 4 :(得分:1)
可能危险的HTML标签:
虽然不是详尽的列表,但以下常用的HTML标记可能允许恶意用户注入脚本代码:
<applet>
<body>
<embed>
<frame>
<script>
<frameset>
<html>
<iframe>
<img>
<style>
<layer>
<link>
<ilayer>
<meta>
<object>
攻击者可以使用HTML属性(如src,lowsrc,style和href)与前面的标记一起注入跨站点脚本。例如,标记的src属性可以是注入源,如以下示例所示。
<img src="javascript:alert('hello');">
<img src="java
script:alert('hello');">
<img src="java
script:alert('hello');">
攻击者还可以通过更改MIME类型来使用标记注入脚本,如下所示。
<style TYPE="text/javascript">
alert('hello');
</style>