我们为什么要注意Javascript中的代码注入?

时间:2015-12-14 04:59:27

标签: javascript security xss code-injection

我刚刚研究,为什么使用Either Failure函数很糟糕,我找到了一个容易受到代码注入攻击的原因(Post:Why is using the JavaScript eval function a bad idea?)。

但我的问题是,我们是否一定需要担心javascript中的代码注入?因为,如果任何用户想要为网站运行任何JS脚本,他可以通过在控制台中运行来实现。

所以,我只是想知道,如果有人成功地在我的javascript代码中注入他的代码,它可能会造成多大的伤害?

修改
基于Oleander在下面的回答,当我们通过AJAX调用在浏览器和服务器之间进行通信时,我发现了一种漏洞。这很有道理。但我可能有Javascript程序只能在浏览器中运行,并且没有与后端的任何通信,例如计算器或简单游戏。所以我的补充问题是,还有其他任何原因导致这些程序也容易受到攻击吗?

2 个答案:

答案 0 :(得分:4)

当黑客将有害代码注入用户发出的JSON请求时会发生安全问题,然后使用eval进行评估。

想象一下,正在运行以下代码

$.get("/get.json", function(data){
  var obj = eval(data) // String to javascript object
});

资源看起来像这样

GET /get.json
{
  some: "data"
}

但攻击者使用man in the middle attack

取代上述内容
function(){
  // send window.cookie to attacker
}();

攻击者现在可以访问用户会话。

答案 1 :(得分:2)

如果您的代码从查询字符串中获取值并在eval中使用它,那么攻击者可能会诱使其受害者访问包含邪恶查询字符串的URL。

来自OWASP

<script>
function loadObj(){
 var cc=eval('('+aMess+')');
 document.getElementById('mess').textContent=cc.message;
}

if(window.location.hash.indexOf('message')==-1)
  var aMess="({\"message\":\"Hello User!\"})";
else
  var aMess=location.hash.substr(window.location.hash.indexOf('message=')+8);
</script>

攻击者可以发送包含链接的电子邮件,或将访问其恶意网站的用户重定向到该网址

http://example.com/page.html?message=<img onerror="alert(xss)">

然后你有一个基于DOM的XSS攻击。

如果没有后端的游戏位于包含其他敏感信息的站点上,例如用户会话,则攻击者可能会窃取会话cookie或获取凭据。这完全取决于JavaScript可以访问的内容。也就是说,它将拥有对其托管域的完全访问权限,因为同源策略将限制它。但是,如果您在此处有其他敏感应用程序,那么它们可能会受到损害。如果没有,那么在最坏的情况下,攻击者可能会通过更改内容或监控用户在您网站上执行的操作来滥用用户对您网站的信任。