【问题标题】:Preventing / understanding xss with javascript encoding使用 javascript 编码防止/理解 xss
【发布时间】:2013-05-26 14:14:11
【问题描述】:

我目前正在阅读 .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. 将 viewbag 打印放在现有脚本代码中(这就是本书的内容)
  3. 将 %20 替换为实际空格
  4. 使用jquery将html替换为ViewBag.test:
    $('#inject_here').html('@ViewBag.test');

我尝试的任何方法都不会执行此代码(我猜这是件好事?)。现在我知道这本书不会有一部分专门讨论一开始就不起作用的东西,所以问题一定出在我的头上。我只是不知道它是什么。有人有什么想法吗?

【问题讨论】:

    标签: javascript asp.net-mvc-4 xss


    【解决方案1】:

    asp.net MVC 尝试为您解决这个问题。它自动编码输出。您必须竭尽全力打印出没有 html 编码的字符串。

    @Html.Raw(ViewBag.test)
    

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

    【讨论】:

    • 你是对的。原来这本书的这一部分只展示了 xss 的概念示例,而不是工作代码。猜猜我跳过了那部分:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2023-02-07
    • 2013-03-19
    • 2012-10-28
    • 2018-07-16
    相关资源
    最近更新 更多