我目前正在阅读.net MVC,并且刚刚读到了这本书的安全章节。我知道xss,我从来不信任任何用户输入,除非首先清除它(通常使用html编码,甚至类似于php的strip_tags)。到目前为止,我还不熟悉用于保护的Javascript编码字符串。书中的一个例子是用户传递了一个字符串,如下所示:
\x3cscript\x3e%20alert(\x27test\x27)\x3c/script\x3e
所以当我学到一些新的东西时,我很自然地想要测试它。我创造了这个:
public ActionResult Index()
{
ViewBag.test = "\x3cscript\x3e%20alert(\x27test\x27)\x3c/script\x3e";
return View("index");
}
并在页面上打印出测试字符串的视图代码:
@ViewBag.test
但是,我根本无法显示此警报框。当我在页面上查看源代码时,我会得到
<script>%20alert('test')</script>
我试过用几种不同的方法
我尝试的任何东西都不会执行这段代码(我猜这是件好事?)。现在我知道这本书中不会有一部份专门讨论一些在一开始就不起作用的事情,所以问题就在我的头上。我只是不知道那是什么。有人有什么想法吗?
发布于 2013-05-30 13:00:03
asp.net MVC试图为您解决这个问题。它自动编码输出。您必须不择手段地打印出一个字符串,而不需要html编码。
@Html.Raw(ViewBag.test)
在某些地方,您将在应用程序中完成此操作。理想情况下,您应该有模型呈现到的模板。但是,在某些情况下,您将有动态的HTML部分,需要按原样打印。在这些情况下,您将使用Html.Raw
,只需要知道您必须验证内容的正确性。
https://stackoverflow.com/questions/16845734
复制