许多人似乎对使用eval()的概念感到不满。我完全理解随之而来的XSS攻击和安全问题。但是,使用eval()来解析通过HTTPS从您自己的服务器获得的JSON文档是不是很糟糕,保证服务器有效,并且不包含用户生成的数据?
答案 0 :(得分:3)
正如其他人在评论中所说,使用JSON解析器(例如JSON.parse()
,内置于大多数浏览器中)来解析JSON。虽然JSON与JavaScript兼容,但它不是一回事,而是用于不同的目的。
我想更一般地回答你的问题,因为这是我认为很多人刚才开始的想法:
但是,使用eval() [...] 不包含用户生成的数据是不是很糟糕?
如果您正在编写将数据从一个层传输到另一个层,或者从一个系统传输到另一个层的代码,那么通过适当的封装来实现这一点绝对是至关重要的。每当您发现自己将数据与命令混合时,您应特别小心地使数据正确转义,以使其永远不会模糊,并且不会混淆命令。 / p>
在注射方面,安全性不是唯一的问题。无论是否有人试图利用它,问题都存在。你可能会有一些带引号的数据,或者你没想到的值。您的代码应该像处理数据时一样透明。例如,如果您正在编写ORM,则ORM不应以任何方式修改数据。它应该确保它可以在一个整体上可靠地结束。
我看到很多人一直在使用URL中的数据。有人在没有转义的情况下将数字ID号连接到URL是很常见的。我问他们......你确定你的身份证总是一个号码,而且可能永远不会包含保留字符吗?如果有人想在某个不同的环境中重新使用您的代码会怎么样?
关于应该如何使用某些内容的假设通常是错误和安全漏洞的根源,而这些漏洞实际上就是其中之一。