【发布时间】:2015-10-10 00:31:03
【问题描述】:
我想知道是否有行业标准可以更好地保护移动设备上的 ajax 调用。
我的移动应用程序包含我网站的 html、js 和 css 文件,但为了提高性能,它们会在本地安装在移动设备上。移动设备的本地 index.html 然后调用我的网络服务器获取数据(在本例中为 Tomcat)。
我发现这个工作的唯一方法是在我的 servlet 中启用 CORS:
response.setContentType("text/html");
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS, DELETE");
response.addHeader("Access-Control-Allow-Headers", "Content-Type");
response.addHeader("Access-Control-Max-Age", "86400");
但老实说,出于各种原因,我不喜欢这样,但主要是 -- 现在任何东西都可以从 任何域 查询我的网络服务器并得到响应...
如何使用 CORS 从移动设备对我的网络服务器进行相同的 ajax 调用 - 但以更安全的方式仅允许我的应用访问?
** 或 ** 在这种移动情况下,CORS 是否完全不正确,是否有更标准/更理想的解决方案?
【问题讨论】:
-
"现在任何东西都可以在本地查询我的网络服务器并获得响应。"为什么这是一件坏事?
-
@KevinWorkman 因为它变成了某种公共 API,所以不仅仅是我的网站可以调用它。我看错了吗?
-
老实说,我不知道。我不是网民。你得到了我的支持,因为我认为这是一个有趣的问题,并且想自己知道答案。话虽如此,听起来您有两个相互竞争的目标——您想要一个为自己提供的公共 API,而不是为其他人。你怕人家做什么?有没有办法解决这个问题?可能需要登录? API 密钥?限制?同样,我不知道我在说什么,但这就是为什么我问拥有公共 API 到底有什么不好。听起来您所描述的问题首先是您的全部目标,哈哈。
-
感谢您抽出宝贵时间,我真的很感激...是的,我想这就是我的问题 - 我可以拨打 CORS 类型的电话并保持私密。我阅读您的评论越多,我认为 API 密钥/oauth 可能是唯一的途径..
-
据我所知,只有浏览器(Firefox、Chrome、IE...)在发出跨域请求之前会检查 CORS。在您的服务器上禁用 CORS 可能会阻止我在其他网站上为您的 API 创建 Web 客户端,但不会阻止我使用
curl、wget或任何带有 http 客户端的编程语言调用它。
标签: java ajax web-services security cors