Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在URL中编码JSON时是否存在XSS威胁?_Javascript_Json_Security_Xss_Urlencode - Fatal编程技术网

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

Javascript 在URL中编码JSON时是否存在XSS威胁?,javascript,json,security,xss,urlencode,Javascript,Json,Security,Xss,Urlencode,为了有一个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": { "va

为了有一个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);
上下文仅存储用于读取变量,其中没有计算代码。有人能告诉我它是否安全吗


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

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

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


我看不出有什么威胁。完全安全
JSON.parse
不允许运行任何
函数


还有,为什么要使用
。如果你想给人一种“真实”url的感觉,用hashbang代替。

标签是否最终被插入到DOM的某个地方?(即,
$('#something').html(context.attr1.target\u id-0.label)


然后我可以把
放在
标签中
,这是你的XSS。

+1作为问题。我喜欢这种方法:)我使用“?”来避免这和真正的“标签”之间的所有错误。读者还应该看到@josh3736的答案,它提出了一个可能涉及潜在威胁的有趣观点+1非常聪明的一点,我接受@copy的答案,严格来说,这就是我问题的答案。