0

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

2 回答 2

3

您需要同时[ValidateInput(false)]在操作和@Html.Raw视图中使用:

控制器:

[HttpPost]
[ValidateInput(false)]
public ActionResult Index(string search)
{
    ViewBag.Message = search;
    return View();
}

看法:

<h2>@Html.Raw(ViewBag.Message)</h2>
于 2013-08-18T07:08:29.497 回答
1

MSDN 有一篇关于防止跨站点脚本的精彩文章:如何:防止 ASP.NET 中的跨站点脚本

您可能还想尝试一些安全工具,例如Netsparker,它们将测试一系列常见的和不太常见的攻击向量。

于 2013-08-18T08:15:11.827 回答