javascript - 当网页和 ajax 调用来自同一台服务器时,JSON.parse() 真的比 eval() 更安全吗?

标签 javascript json eval

我知道 JSON.parse() 可以防止攻击者将 javascript 注入(inject)到响应中,因为 JSON 解析器只是一个文本解析器,而不是脚本解析器,所以请不要关闭这是所有其他问题的重复谈谈那个。这是一个不同的问题。

如果攻击者可以劫持您的 Ajax 调用并将 javascript 放入 Ajax 调用中,他们是否也有可能劫持您的实际网页并将任意 javascript 放入您的页面,从而完成完全相同的攻击?

当然,使用 JSON.parse() 而不是 eval() 不会有任何损失(除非您的环境中还没有 JSON 解析器并且必须添加更多代码才能获得),但是在什么情况下如果您的网页由与您的 ajax 调用相同的主机提供服务,它真的会增加安全性吗?

最佳答案

是的,确实更安全。 您没有采取的每一项预防措施都是您没有阻止的一系列潜在攻击。

攻击者可能能够对您服务器的输出进行一些控制,而无需完全更改它。没有人认为这是一颗 Elixir ,但它的速度可能更快,而且您不会造成可能再次伤害您的潜在漏洞。

也许运行你的服务器的人今天过得很糟糕,做了一些愚蠢的事情,比如通过连接未经处理的用户输入来构造 JSON:

<?php
    print '{"foo": ' . $_GET['bar'] . '}';
?>

如果您正在使用 JSON.parse,它们最糟糕的做法是将一个大对象插入您的内存中。如果您使用 eval,它们可以劫持所有内容。

关于javascript - 当网页和 ajax 调用来自同一台服务器时,JSON.parse() 真的比 eval() 更安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6765106/

相关文章:

javascript - 使用 JS 转换任何以 hashtag 开头的内容。但前提是超过 3 个字符

javascript - 将 text.json 解析为 jquery.animation?

javascript - ng-按顺序重复渲染 json

Python 评估 : What's wrong with this code?

javascript - onclick 事件打开两个日历

javascript - 检测点击外部元素(vanilla JavaScript)

javascript - 简单的 Reduce 函数 - JavaScript

javascript - 使用node.js解析json时遇到问题

javascript - eval() 关键字究竟如何破坏 javascript 中的编译器优化

javascript - 在 HTML 文本上使用 Javascript 的 eval()