使用 JQUERY 避免 .getJSON 上的 XSS
Avoid XSS on a .getJSON using JQUERY
我需要从 JSON 中提取数据。我能够这样做:
$.getJSON(MACHINE + '/DailyFoundServlet?csfin=' + sDateFoundArray [i][CODE] + '&found=1&pubblic=true&callback=?', function(data) {
sDateFoundArray [i][FOUND]=data;
sDateFoundArray [i][NSER]++;
})
这个工作正常但不安全,参数 'callback' 容易受到 XSS 攻击。我怎样才能确保我不允许 XSS?
提前致谢!
我开始怀疑你必须使用 JSONP。没有保护回调的方法,它基本上是在您的页面中注入 <script>
并执行代码。仅供参考:jQuery JSONP Security
I will start with this:
There is no difference between jsonp way of working and <Script src='whatever'> </script>
Now , use your imagination what are the pitfalls.
考虑一下,和你的基本一样.getJSON()
:
$.ajax({
url: MACHINE + "/DailyFoundServlet",
dataType: "jsonp",
data: {
'csfin': sDateFoundArray [i][CODE],
'found': 1,
'public': true
},
jsonp: "callback",
sucess: function(data) {
sDateFoundArray [i][FOUND]=data;
sDateFoundArray [i][NSER]++;
}
});
我还注意到在您的 post 中,URL 字符串显示: pubblic=true
我不确定这是错字还是故意的。我以为这是一个错字。上面的代码仍然存在XSS漏洞。
正如我提到的,如果可以的话,我建议使用 POST 作为更安全的选项。这看起来像:
$.ajax({
url: MACHINE + "/DailyFoundServlet",
dataType: "json",
data: {
'csfin': sDateFoundArray [i][CODE],
'found': 1,
'public': true
},
method: "post",
sucess: function(data) {
sDateFoundArray [i][FOUND]=data;
sDateFoundArray [i][NSER]++;
}
});
此代码适用于返回的数据并且需要 JSON 数据。如果有人试图发回其他数据,如脚本块,它将不会被解释,函数将失败。在将 data
传递回您的变量之前,检查 data
是否有 length
或正确的内容类型也是明智的。类似于:
sucess: function(data) {
if(data.length != 0){
sDateFoundArray [i][FOUND]=data;
sDateFoundArray [i][NSER]++;
}
}
我需要从 JSON 中提取数据。我能够这样做:
$.getJSON(MACHINE + '/DailyFoundServlet?csfin=' + sDateFoundArray [i][CODE] + '&found=1&pubblic=true&callback=?', function(data) {
sDateFoundArray [i][FOUND]=data;
sDateFoundArray [i][NSER]++;
})
这个工作正常但不安全,参数 'callback' 容易受到 XSS 攻击。我怎样才能确保我不允许 XSS?
提前致谢!
我开始怀疑你必须使用 JSONP。没有保护回调的方法,它基本上是在您的页面中注入 <script>
并执行代码。仅供参考:jQuery JSONP Security
I will start with this:
There is no difference between jsonp way of working and
<Script src='whatever'> </script>
Now , use your imagination what are the pitfalls.
考虑一下,和你的基本一样.getJSON()
:
$.ajax({
url: MACHINE + "/DailyFoundServlet",
dataType: "jsonp",
data: {
'csfin': sDateFoundArray [i][CODE],
'found': 1,
'public': true
},
jsonp: "callback",
sucess: function(data) {
sDateFoundArray [i][FOUND]=data;
sDateFoundArray [i][NSER]++;
}
});
我还注意到在您的 post 中,URL 字符串显示: pubblic=true
我不确定这是错字还是故意的。我以为这是一个错字。上面的代码仍然存在XSS漏洞。
正如我提到的,如果可以的话,我建议使用 POST 作为更安全的选项。这看起来像:
$.ajax({
url: MACHINE + "/DailyFoundServlet",
dataType: "json",
data: {
'csfin': sDateFoundArray [i][CODE],
'found': 1,
'public': true
},
method: "post",
sucess: function(data) {
sDateFoundArray [i][FOUND]=data;
sDateFoundArray [i][NSER]++;
}
});
此代码适用于返回的数据并且需要 JSON 数据。如果有人试图发回其他数据,如脚本块,它将不会被解释,函数将失败。在将 data
传递回您的变量之前,检查 data
是否有 length
或正确的内容类型也是明智的。类似于:
sucess: function(data) {
if(data.length != 0){
sDateFoundArray [i][FOUND]=data;
sDateFoundArray [i][NSER]++;
}
}