我目前正在阅读 .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>
我试过用几种不同的方式玩它
- 从查询字符串传递@ViewBag
- 将 viewbag 打印放在现有脚本代码中(这就是本书的内容)
- 用实际空格替换 %20
- 使用 jquery 将 html 替换为 ViewBag.test:
$('#inject_here').html('@ViewBag.test');
我尝试的任何操作都不会执行此代码(我想这是一件好事?)。现在我知道这本书不会有一部分专门讨论一开始就不起作用的东西,所以问题一定出在我的头上。我只是不知道它是什么。有人有想法么?