在URL中编码JSON时是否存在XSS威胁

Is there any XSS threat while having JSON encoded in the URL?

本文关键字:是否 存在 XSS 威胁 JSON URL 编码      更新时间:2023-09-26

为了有一个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安全吗?

如果存在威胁:我该如何避免?

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

JSON.parse不存在此问题,并且可以安全地抵御此类攻击。

另请参阅(json.org).

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

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

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

此外,为什么使用?。如果你想给人一种"真实"url的感觉,可以使用hashbang。