如何只允许Web应用程序访问Web服务?
问题描述:
我有一个web应用程序,它使JavaScript调用Web服务。我不想让任何像SOAP ui/curl这样的程序访问我的web服务。 在响应头我做过滤以只我的网页:如何只允许Web应用程序访问Web服务?
Access-Control-Allow-Origin:http://myurl.com
当我的要求去做,从我的本地机器的服务器不允许这样做:
XMLHttpRequest
:无法加载http://myurl.com/service/rest/user/add。Access-Control-Allow-Origin
标题的值为http://myurl.com不等于提供的来源。原因http:// localhost:9000因此不允许访问。
这很好,我很开心,但显然我可以使用Soap ui/curl进行上述调用,并且该服务允许它。此通话的标题:
=== MimeHeaders ===
accept-encoding = gzip,deflate
content-type = application/json
content-length = 39
host = localhost:8080
connection = Keep-Alive
user-agent = Apache-HttpClient/4.1.1 (java 1.5)
如何仅允许我的网络应用程序来源调用服务?
答
您在这里定义的只是客户端保护,以防止浏览器客户端对服务器执行恶意请求,只要浏览器未以不安全模式运行即可。
如果您需要后端的安全性,请考虑使用某种防火墙来限制网络访问,或使用基本身份验证等身份验证机制来保护您的后端。
答
快速回答:您无法确定100%,您的网页中的Javascript发出请求。根据定义,这是您的用户提出请求。
其他回答:你可以使用多种东西来保护自己。
- 生成有限生命周期的cookie。
- 制作一个油门,以便您可以按时间单位限制请求的数量。
- ....
还有更多其他的解决方案,只需搜索它在网络上,你会发现很多。
真的没有可靠的方法来执行这种限制。你为什么想要? – Pointy
CORS仅在与远程域上的资源联系时由(支持)客户端浏览器强制执行。因此,当远程服务器或任何其他类型的远程软件向您的服务器发送HTTP请求时,CORS不适用。限制访问服务取决于您的设置和服务器类型的其他因素。请分享这些。 – Boaz
浏览器使用Access-Control-Allow-Origin和类似的头文件,由于curl不在浏览器中运行,所以这些头文件将被忽略。你可以尝试检查Referrer或代理字符串,使用生成的令牌等,但是你不能100%阻止任何不是你的应用程序的东西。 –