Javascript 在URL中编码JSON时是否存在XSS威胁?
为了有一个URL友好的应用程序,我存储它的上下文在URL中有一个JSON,它给出如下内容: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
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的答案,严格来说,这就是我问题的答案。