为什么我们应该注意Javascript中的代码注入

Why should we be aware of Code Injection in Javascript?

本文关键字:代码 注入 Javascript 我们 为什么      更新时间:2023-09-26

我只是在研究为什么使用eval()函数不好,我发现了一个容易受到代码注入攻击的原因(文章:为什么使用JavaScript eval函数是个坏主意?)。

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

所以,我只是想知道,如果有人成功地在我的javascript代码中注入了他的代码,这可能会造成什么额外的伤害?

编辑
根据Olander下面的回答,我发现了一种漏洞,当我们通过AJAX调用在浏览器和服务器之间进行通信时。这很有道理。但我可能有Javascript程序,这些程序只在浏览器中运行,与后端没有任何通信,例如计算器或简单游戏。因此,我在这里的补充问题是,是否还有其他原因会使这些项目变得脆弱?

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

假设以下代码正在运行

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

资源看起来像这个

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

但是攻击者使用中间人攻击来代替上述攻击

function(){
  // send window.cookie to attacker
}();

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

如果您的代码从查询字符串中获取一个值并在评估中使用它,攻击者可能会诱使受害者访问包含邪恶查询字符串的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>

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

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

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

如果你的游戏没有后端,而网站上有其他敏感信息,如用户会话,那么攻击者可能会窃取会话cookie或获取凭据。这完全取决于JavaScript可以访问什么。也就是说,它将完全访问其托管域,因为同源政策将限制它访问。然而,如果您在这里有其他敏感应用程序,那么它们可能会被泄露。如果没有,那么在最坏的情况下,攻击者可能会通过更改内容或监视用户在您的网站上的行为来滥用用户对您网站的信任。