模拟VS2012 MVC4应用程序中的XSS攻击

时间:2013-08-18 07:00:30

标签: c# javascript html asp.net-mvc

我有一个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();
        }

2 个答案:

答案 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,它们将测试一系列常见且不太常见的攻击媒介。