我有一个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();
}
您需要在Action上使用[ValidateInput(false)]
,在View:中使用@Html.Raw
控制器:
[HttpPost]
[ValidateInput(false)]
public ActionResult Index(string search)
{
ViewBag.Message = search;
return View();
}
视图:
<h2>@Html.Raw(ViewBag.Message)</h2>
MSDN有一篇关于防止跨站点脚本的好文章:如何:防止ASP.NET中的跨站点脚本。
您可能还想尝试一些安全工具,如Netsparker,它将测试一系列常见和不太常见的攻击向量。