Chr*_*ian 8 javascript server-response eval
有人声称评价是邪恶的.
任何常规HTML页面可能如下所示:
<script src="some-trendy-js-library.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
也就是说,假设这样做的人知道他的工作,并在页面末尾加载javascript.
在这里,我们基本上将脚本文件加载到Web浏览器中.有些人已经深入了解并将其用作与第三方服务器通信的方式......
<script src="//foo.com/bar.js"></script>
Run Code Online (Sandbox Code Playgroud)
此时,无论出于何种原因,已经发现在运行时有条件地加载这些脚本是很重要的.
我的观点是什么?虽然机制不同,但我们正在做同样的事情......执行一段纯文本作为代码 - 又名eval().
现在我已经说清楚了,这就是问题......
鉴于某些条件,例如AJAX请求,或(更有趣的是)websocket连接,从服务器执行响应的最佳方法是什么?
这是一对让你思考的事情......
eval()服务器的输出.(那边那个家伙晕了吗?)var resp = sock.msg; myObj[resp]();"邪恶"并不意味着"禁止".有时,使用所谓的"邪恶"特征有充分的理由.它们被称为"邪恶",因为它们可能并且经常被滥用.
在您的情况下,客户端脚本只允许向"自己的"服务器发出请求.这是原始JavaScript所来自的服务器,因此动态响应与原始代码一样受信任.一个非常有效的场景eval().
鉴于某些条件,例如AJAX请求,或(更有趣的是)websocket连接,从服务器执行响应的最佳方法是什么?
eval用于解析消息结果的主要批评是它太过分了 - 你正在使用大锤来攻击苍蝇,其中包含来自过度使用工具的所有额外风险 - 它们可以反弹并击中你.
让我们将各种反应分解为几个不同的类别:
对于(1),XHR + eval和XHR +之间没有区别<script src>,但XHR + eval几乎没有优势.
对于(2),差别不大.如果您可以使用JSON.parse您解压缩响应可能会遇到更少的问题,但是eval额外的权限不太可能被来自受信任来源的数据滥用,否则如果您有充分的积极理由那么这不是什么大问题.eval.
对于(3),存在很大差异. eval即使你非常小心,超额可滥用的权威也可能会惹恼你.这在安全方面是脆弱的.不要这样做.
对于(4),最好将它分成数据问题和代码问题.如果您可以在执行前验证结果,JSONP允许此操作.使用JSON.parse或其他具有很少可滥用权限的数据解析数据,因此您编写并批准用于外部使用的功能会产生副作用.这最大限度地减少了多余的可滥用权限.天真eval在这里很危险.