在JSON和安全性中注入javascript

| 我有一个在线服务,用户可以在其中创建json支持的文档。然后将它们存储在服务器上,其他用户可以加载它们。然后将json解码为与提交时完全相同。如果用户在提交json之前篡改了json并注入了任意javascript,然后在查看器的浏览器上执行了这些操作,是否存在任何安全风险?这有可能吗?这就是我需要知道的,如果可能的话,或者可以从json字符串中任意执行javascript。     
已邀请:
        JSON传统上是使用
eval()
语句进行解析的,该语句尽可能不安全。如果您允许这样做,则您的应用程序将是不安全的。     
        这完全取决于a)是否在服务器端清理JSON,以及(更多)b)在再次加载客户端时如何在客户端解码JSON。 使用“ 0”将JSON反序列化为Javascript对象的任何代码都是完全开放的,可精确描述您所描述的攻击。 任何使用JSONP加载JSON的代码(即将JSON作为Javascript文字传递给命名的回调函数)都对您描述的攻击开放(实际上与使用``0''相同)。 大多数健壮的JSON解析机制(例如JSON2.js,jQuery
$.parseJSON
函数或支持它的浏览器中的本机
JSON.parse()
函数)都不会接受不遵循JSON规范的JSON。因此,如果您正在使用库来解析JSON字符串,则可能是安全的。 不管您打算如何在客户端加载JSON,优良作法都是在服务器端清除所有用户提交的内容。在这种情况下,您可以使用服务器端代码来检查JSON是否有效(例如,在Python中使用
json.loads(user_submitted_json)
,并捕获错误)。 因此,在服务器端和客户端都应格外小心,您应该能够安全地执行此操作。     
        
<plug shameless=\"true\">
JSON sanval旨在避免格式错误的JSON问题,同时仍能高效解析。   此JSON解析器不会尝试验证JSON,因此可能会在语法输入无效的情况下返回结果,但不会使用eval,因此具有确定性,并且保证不修改除其返回值以外的任何对象。      json.org上的JavaScript中有许多JSON解析器。每当需要考虑安全性时(当JSON可能来自不受信任的来源时),就应该使用此实现,而速度是关注点,而畸形JSON上的错误也不是要考虑的问题。
</plug>
    

要回复问题请先登录注册