【问题标题】:Is there any XSS threat while having JSON encoded in the URL?在 URL 中编码 JSON 时是否存在任何 XSS 威胁?
【发布时间】:2012-07-09 18:32:59
【问题描述】:

为了有一个 URL 友好的应用程序,我存储它的上下文在 URL 中有一个 JSON,它给出了类似的内容:

http://mysite.dev/myapppage/target#?context={%22attr1%22%3A{%22target_id-0%22%3A{%22value%22%3A%223%22%2C%22label%22%3A%22Hello%22}}}

对基本上下文进行编码:

{
"attr1":
    {
    "target_id-0":
        {
        "value": "3",
        "label": "Hello"
        }
    }
}

我正在序列化我的对象:

JSON.stringify(context)

我正在反序列化它:

var hashParamsElements = window.location.toString().split('?');
hashParamsElements.shift(); // we just skip the first part of the url
var hashParams = $.deparam(hashParamsElements.join('?'));
var contextString = hashParams.context;
var context = JSON.parse(contextString);

上下文仅存储用于读取变量,其中没有评估代码。谁能告诉我它是否是 XSS 安全的?

如果有威胁:我该如何避免?

【问题讨论】:

  • +1 提问。我喜欢这种方法:)

标签: javascript json security xss urlencode


【解决方案1】:

这种威胁来自使用不同的 JSON 解码方法,即evalnew Function。它们直接执行 JS 代码,因此通过将代码放入 url(并链接到它)来允许非持久性 XSS 攻击。

JSON.parse 没有这个问题,并且可以安全抵御此类攻击。

See also (json.org).

【讨论】:

  • 读者还应该看到@josh3736 的回答,该回答提出了一个可能涉及潜在威胁的有趣观点!
【解决方案2】:

label 最终会被插入到 DOM 的某个地方吗? (即,$('#something').html(context.attr1.target_id-0.label)

然后我可以将<script>...</script> 放入label 中,这就是你的 XSS。

【讨论】:

  • +1 非常聪明,我接受@copy 的回答,严格来说就是我的问题的答案。
【解决方案3】:

我没有看到任何威胁。它完全安全。 JSON.parse 不允许任何 function 运行。

另外,为什么要使用 ? 。如果您想给人一种“真实”网址的感觉,请改用 hashbang。

【讨论】:

  • 我正在使用“?”避免这与真正的“标签”之间的所有错误
猜你喜欢
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多