在我们的Web应用程序中,我们遇到了这样的情况:我们需要从一个完全控制的域控制到我们完全控制的另一个域的跨域 AJAX调用.我一直在寻找最佳解决方案,我想到的两个是本地文件代理(使用PHP :: fopen的本地文件)或 jquery / JSONP.

当我在网上查看时,我看到人们经常谈论使用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是安全的,如果存在任何风险怀疑,则将其传递给过滤器代理.

解决方法

当您控制请求的两端时,大多数关于JSONP的传统安全性担忧都不是问题.

您将遇到的另一个问题是某些用户阻止第三方脚本作为安全措施.这也会阻止你的JSONP请求.服务器端代理方法没有这个问题.

jquery – 跨域JSONP通信有哪些风险?的更多相关文章

  1. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. 有没有办法知道购买哪个iTunes帐户? – iOS

    我的应用程序提供应用内购买非消耗类型.该应用程序具有登录功能.是否可以根据登录用户购买我的应用程序?

  3. ios – Apple应用程序内购买收据 – 在服务器端验证

    我想验证它,并确保这是独一无二的.我担心的是:如果有人会收到一张有效收据,他就可以破解我们的服务器端API,并使用相同的有效收据进行无限数量的应用内购买.我应该以某种方式解密并检查transaction_id的“原始”收据,即我发送给Apple进行验证的收据?

  4. ios – 服务器端接收验证失败时是否应该调用finishTransaction?

    我们应该调用finishTransaction吗?这导致无效的交易永远活在队列中?就像在这个问题上说的那样:iPhonein-apppurchase:receiptverificationButifyoufindoutthatareceiptisinvalid,youshouldfinishtheassociatedtransaction.Ifnot,youmayhaveextra-transactionslivingforeverinthetransactionqueue.Thatmeansthatea

  5. 在IOS9中的Cordova应用程序使用JQuery / Javascript的window.history问题

    在两个测试用例中唯一改变的是Cordova.js.解决方法我看到这是几个星期前,但我会发布这个,以防其他人遇到它.听起来它可能与iOS9中的哈希更改生成的导航事件有关.如果是这样,可以将其添加到index.html以禁用哈希侦听:

  6. iOS 5上的jQuery事件

    解决方法在Apple开发论坛上由一个人回答:我需要在将元素添加到DOM之后才绑定(),如下所示:

  7. Project Perfect让Swift在服务器端跑起来-引言一

    你认识Swift或者是在客户端,因为它是苹果用来开发客户端的新一代语言。可以说Swift已经是一个完整的跨平台语言了。Perfect让Swift在服务器端跑起来了,它是开源的。添加完后你打开Xcode就可以看到Perfect模版了。PerfectLib你可以理解成Perfect框架,而PerfectServer是启动支持Perfect的类似IIS/Apache的容器,MysqL是需要介入MysqLConnector5.利用Perfect模版创建PerfectWeb项目,如图我创建了一个HelloWorld

  8. android – Phonegap本地构建 – jquery ajax错误:readystate 0 responsetext status 0 statustext error

    解决方法您是否在索引文件中包含了内容安全元标记?

  9. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  10. 设置焦点到输入框和显示Android键盘使用jquery手机在pageshow

    我正在设置焦点到输入框,并显示Android键盘使用jquery手机网页显示.我从Web上尝试过很多选项.但是没有一个在模拟器和移动设备中都能按预期工作.这是代码:查找屏幕截图以供参考请咨询…解决方法对我有用的解决方案

随机推荐

  1. jquery-plugins – 是否可以使用猫头鹰旋转木马实现循环/无限轮播?

    我正在使用猫头鹰旋转木马,它的工作完美,除了它不支持循环/无限滚动.我没有搜索google和stackoverflow的想法,没有运气.有没有人在猫头鹰旋转木马上实现圆形/无限滚动?

  2. jQuery动态输入字段焦点

    我想使用以下jQuery向我的页面动态添加一个输入字段:在这样做之后,我希望输入字段具有闪烁的文本光标的焦点,所以我想在创建后立即输入.有人可以告诉我我该怎么办?

  3. jquery – 为什么$(window).height()这样错了?

    我试图获取当前浏览器的视口高度,使用但我得到的价值观太低了.当视口高度高达850px时,我从height()获取大约350或400像素的值.这是怎么回事?

  4. jquery – 如果在此div之外和其他draggables内部(使用无效和有效的还原选项),则可拖动恢复

    例如这样但是由于明显的原因,这不行.我可以说这个吗?

  5. 创建一个jQueryUI 1.8按钮菜单

    现在jQueryUI1.8已经出来了,我正在浏览更新,并且遇到了新的Buttonwidget,特别是SplitButtonwithadropdown的演示之一.这个演示似乎表明Buttonwidget可以在这里创建一个下拉菜单.作为讨论的问题,我想知道使用这个新的Button小部件来创建一个下拉菜单有什么方法.干杯.解决方法您必须在按钮下方列出一个列表,方式类似于此处为自动完成提供的演示:http

  6. 灰色divs使用JQuery

    我试图使用这个代码:为了淡出一大堆名为MySelectorDiv的div,唯一的是,它只会淡出第一个而不是所有的div,为什么呢?

  7. 使用jQuery动态插入到列表中

    我有两个订单列表在彼此旁边.当我从一个列表中选出一个节点时,我想按照字母顺序插入到另一个列表中.抓住的是我想要把一个元素放在另一个列表中,而不刷新整个列表.奇怪的是,当我插入到右边的列表中,它工作正常,但是当我插入到左边的列表中时,顺序永远不会出来.我也尝试将所有内容读入数组,并将其排序在一起,以防止children()方法没有按照显示顺序返回任何东西,但是我仍然得到相同的结果.这是我的jQuer

  8. 没有回应MediaWiki API使用jQuery

    我试图从维基百科获取一些内容作为JSON:但我没有回应.如果我粘贴到浏览器的地址栏,就像我得到预期的内容.怎么了?解决方法您需要通过添加&callback=?来触发具有$.getJSON()的JSONP行为?在querystring上,像这样:Youcantestithere.没有使用JSONP,你正在击中same-originpolicy,阻止XmlHttpRequest获取任何数据.

  9. jQuery Ajax请求每30秒

    我有这段代码,但是有些人在我的网站上的值可能会改变.我需要每30秒钟更新一次#financediv.这可以做吗解决方法您可以将代码放在单独的函数中,如下所示:然后每30秒建立一个定时器调用该函数:祝你好运!总结以上是DEVMAX为你收集整理的jQueryAjax请求每30秒全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  10. jquery – keypress事件在IE和Chrome中不工作,但在FF工作

    任何想法为什么会这样发生?我通常认为Chrome会更加宽容代码?这是我的按键键.我错过了什么吗?右图();和leftimage();是应该工作的功能,因为我在其他地方使用这些功能谢谢您的帮助!

返回
顶部