我有一个MVC 4应用程序,我正在尝试模拟XSS附加。我只有一个按钮和文本框,它只输出在文本框中输入的值,如下所示。当我在文本框中自动输入<script>alert('xss')</script>
时,会显示一个异常,表明已从客户端检测到危险值。我怎样才能防止这个至少用于学习目的
现在,遵循Furqan的建议后不会出现例外情况。但是我希望警报消息框出现但不会出现,而脚本标记则显示为字符串。
有人可以解释为什么会这样吗?
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<h2>@ViewBag.Message</h2>
<form method="post" action="/home/index">
<input type ="text" id="text" name="search" value="@ViewBag.Message"/>
<input type="submit" />
</form>
这些是我的控制器操作。
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(string search)
{
ViewBag.Message = search;
return View();
}
答案 0 :(得分:3)
您需要在操作中使用[ValidateInput(false)]
,在视图中使用@Html.Raw
:
控制器:
[HttpPost]
[ValidateInput(false)]
public ActionResult Index(string search)
{
ViewBag.Message = search;
return View();
}
查看:
<h2>@Html.Raw(ViewBag.Message)</h2>
答案 1 :(得分:1)
MSDN有一篇关于阻止跨站点脚本编写的精彩文章:How To: Prevent Cross-Site Scripting in ASP.NET。
您可能还想尝试一些安全工具,例如Netsparker,它们将测试一系列常见且不太常见的攻击媒介。