当我在网上查看时,我看到人们经常谈论使用JSONP是多么危险,因为有人可能会用它注入恶意数据.困境在于,反对它的大多数论据似乎都没有多少水,所以我来这里要求Stack澄清.
跨域JSONP将打开哪些特定的攻击媒介?
根据我的理解,JSONP的唯一向量是完全相同的向量,它通过包含< script>来打开.标记在您的网站上,其src是指不受您控制的任何网站:他们可以变为恶意并开始耕种用户会话/ Cookie /数据.如果这是真的,那么似乎关注的不是协议(JSONP),而是从中收集数据的来源.
因为它是否是服务器端代理,< script>标签,或ajax / JSONP的风险在于我将其他人的内容放在我的页面上,如果他们觉得有必要,他们就可以开始耕种用户会话(这种方式正是Google分析通过脚本标记所做的那样).
我在网上听到的许多向量都取决于用户提交的表单和数据的不正确验证.在示例中,JSONP用于提取某个文件,该文件将数据放入表单中,然后提交表单以进行数据库插入.如果来自该表单的数据是可信的,因为它来自被认为是安全的源(JSONP数据),并且在没有验证的情况下放入,那么同样不是JSONP有问题,而是未正确验证的用户输入.用户可以使用Firebug对该表单进行完全相同的修改,但最后我检查没有人给Firebug一个安全向量.
最后一个要素是服务器端代理在将结果传递给客户端之前有更强的过滤能力的概念.然而,无论是PHP还是Javascript,我都可以过滤结果以删除onclick或iframe等内容.当然,有些客户端可以改变我的javascript函数来删除过滤,但过滤只会影响他们的特定客户端体验,并且不会被其他用户更改,从而阻止永久的多客户端XSS攻击.
显然,服务器端代理有一些好处,因为它可以使记录潜在的XSS攻击更容易,但就防止攻击而言,PHP和Javascript似乎都有足够的实用程序.在某些方面,看起来JSONP实际上比简单的< script>更安全.标记,因为至少使用JSONP,结果通过一个函数,这意味着它有点过滤,而不仅仅是一致的信任,就像< script>一样.
我有遗失或忽视的风险吗?如果我正确理解了问题,那么使用JSONP从我们信任的来源包含我们信任的文件的内容就没有安全风险.这是一个准确的评估吗?
解
>如果两端都是可信的,那么JSONP就没有危险(它基本上只是一个< script>标记).
> Script / JSONP都具有相同的安全漏洞,因为它们是自动执行的,而不是简单地作为数据传输.使用服务器端代理意味着跨域返回作为数据传递,并且可以针对恶意内容进行过滤.如果跨域完全受信任,则JSONP / SCRIPT是安全的,如果存在任何风险怀疑,则将其传递给过滤器代理.