创建像这样的JSON对象很简单:
{“key”:“value”,“myFunction”:function(){alert('hi'); }}
并将其从服务器传递到我可以调用myFunction()的脚本。果然,这个功能起作用,我得到一个警报:“嗨”。对我来说,这可能是一个非常有用的方法来保持脚本大小。 但是,我相信在传递函数时存在XSS危险,而不仅仅是通过JSON传递数据。有人可以解释这些是什么,如果合适的话,可以采取哪些步骤来否定它们?
答案 0 :(得分:2)
function
不属于JSON,因为JSON不是JavaScript。
大多数库都使用JSON解析器(尽可能使用browser's one)。所以这不会被正确解析。虽然使用eval
解析JSON是邪恶。 eval
一般都是邪恶的。
你使用<script>
一直在加载JavaScript,所以我不会在这里看到有关XSS的问题。
答案 1 :(得分:0)
这取决于您如何加载和解析JSON。如果您正在使用jQuery并通过AJAX加载数据,那么该数据将传递给浏览器的内置JSON解析器,该解析器不支持greut所解释的功能。 http://erlend.oftedal.no/blog/misc/json/index.html
但是如果你通过JSONP(包装它周围的函数)加载它,通过JSON直接在页面末尾的脚本标记中添加它,就像Socialcast那样,那么它很容易受到攻击。 http://erlend.oftedal.no/blog/misc/json/index2.html
如果您遇到最后一个问题,您应该记住JSON值(和键)应始终包含在“”中。因此,如果要从不受信任的数据构建JSON,则必须记住JSON对其进行编码。它类似于Javascript编码,除了JSON有一些额外的怪癖。例如,您可以拥有一个有效的JSON文件,该文件不是有效的javascript,因为它包含JSON中允许的字符,但需要在javascript中进行编码。