概述
使用Javascript 符号传输敏感数据的应用程序可能容易受到javascript劫持的攻击,这使得未经授权的攻击者能够从易受攻击的应用程序读取机密数据.
推荐
所有使用javascript进行通信的程序都应采用以下防御措施:
- 拒绝恶意请求: 在每个返回javascript的请求中包含一个难以猜测的标识符, 例如会话标识符. 这将通过允许服务器验证请求的来源来抵御跨站点请求伪造攻击.
- 阻止直接执行javascript响应: 在响应中包含一些字符, 这些字符可以防止在不进行修改的情况下成功的将影响传递给javascript解释器.这可以防止攻击者使用
例子1:
var httpRequest = new XMLHttpRequest();
...
var cookies = "cookies=" + escape(document.cookie);
http_request.open('post', url, true);
httpRequest.send(cookies);
例子2:
var object;
var req = new XMLHttpRequest();
res.open('get', 'object.json', true);
req.onreadystatechange = function() {
if(req.readyState == 4){
var txt = req.responseText;
if(txt.substr(0,9) == 'while(1)'){
txt = txt.substring(10);
}
object = eval("("+txt+")");
req=null;
}
}
req.send(null);
什么情况下会有javascript hijacking
当请求的respond 是JSON 数组时, 会发生js hijacking.json 对象就不会发生这个安全问题.
JSON数组被认为是一段可执行的JavaScript脚本,于是浏览器会解析执行。
JSON对象不会被浏览器执行的,因为浏览器认为:它不是一个JavaScript脚本。