繁体   English   中英

使用javascript编码防止/了解xss

[英]Preventing / understanding xss with javascript encoding

我目前正在阅读.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>

我尝试过几种不同的方式

  1. 从查询字符串传递@ViewBag
  2. 将视图袋打印在现有脚本代码的内部(这就是本书的用法)
  3. 用实际空格替换%20
  4. 使用jquery将HTML替换为ViewBag.test:
    $('#inject_here')。html('@ ViewBag.test');

我没有尝试执行此代码(我想这是好事吗?)。 现在,我知道本书中不会有一部分内容专门针对最初没有用的内容,因此问题一定在我身上。 我只是不知道那是什么。 有人有想法么?

asp.net MVC会尝试为您解决此问题。 它会自动编码输出。 您必须不使用html编码就打印出字符串。

@Html.Raw(ViewBag.test)

在某些地方,您最终会在应用程序中执行此操作。 理想情况下,您将具有渲染模型的模板。 但是,在某些情况下,您将拥有动态的HTML部分,需要按原样打印。 在这种情况下,您将使用Html.Raw并只需要注意您必须验证内容的完整性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM