cordova和CORS(iOS)
我最近得到了一个相对较旧的iOS版本的cordova app(iphones),它是在一年前build成的,为了debugging它。
该应用程序从服务器查询API。 这个服务器使用Laravel构build,并使用laravel-cors 。
为了一个特殊的原因,这个应用程序的开发者已经build立了CORS服务器端来接受请求,只要Origin头部缺失。
有人告诉我,这个应用在过去的一年里工作得很好。 在debugging的时候,我注意到iOS浏览器在头文件中添加了origin =>'file://',当cordova应用程序使用$ .ajax做请求时
现在我的问题
你知道更新的iOS版本有这样的变化吗? 我想我不能做任何事情为了绕过它的客户端?
添加“file://”作为可接受的来源,服务器端是否安全?
万分感谢!
服务器接受null-Origin的原因并不是“奇怪的” – CORS是如何定义的。 它旨在防止基于浏览器的XSS攻击 – 浏览器自动发送Origin
头,以便服务器可以接受或拒绝基于它们允许javascript调用的域的请求。 它旨在作为JSONP攻击的一个安全的基于标准的inheritance者来允许跨源的服务器请求,但是以受控的方式。 默认情况下,浏览器只需要并允许同源XHR和其他类似请求( 完整列表 )。
对于非浏览器客户端,CORs是未定义的,因为非浏览器客户端可以设置他们想要的任何Origin
(例如curl
),所以在这些情况下,完全忽略Origin
头部是有意义的。
要回答你的问题的一部分,添加file://
作为一个可接受的原始服务器端是不(非常)安全的。 原因是希望绕过CORS保护的攻击者可以诱使用户下载网页到他们的文件系统,然后在他们的浏览器中执行 – 因此,由于file://
在允许列表中,所以绕过了任何预期的Origin
限制。 也可能有其他利用已知和未知的漏洞利用服务器接受file://
起源。
您必须根据您自己的项目需求评估添加此项风险。