当前位置: 首页 > 知识库问答 >
问题:

为公共的只读web服务启用“Access-Control-Allow-Origin: *”(通配符)安全吗?

宗政安歌
2023-03-14

启用CORS有几个安全问题:

    <李> CSRF < li >受保护数据的暴露

但是,公共和只读Web服务启用全球CORS有什么问题吗?

Access-Control-Allow-Origin: *

我的假设:

  • CSRF不相关,因为webservice是只读的
  • 窃取受保护的数据与此无关,因为webservice是公共的

共有2个答案

闾丘正志
2023-03-14

如果是公共API,则应为所有请求启用CORS。公共API的最佳安全方法之一是在请求头中使用应用程序密钥。

寿高阳
2023-03-14

以下是Fetch规范中的一些相关内容(它定义了CORS):

对于通过IP身份验证或防火墙保护数据的资源(不幸的是仍然相对普遍),使用CORS协议是不安全的。(这就是必须发明CORS协议的原因。)

但是,否则使用以下标头是安全的:

Access-Control-Allow-Origin: *

即使资源公开了基于 Cookie 或 HTTP 身份验证的其他信息,使用上述标头也不会泄露它。它将与 API(如 XMLHttp 请求)共享资源,就像它已经与卷曲卷发共享一样。

因此,换句话说,如果无法从使用curlwget连接到Web的随机设备访问资源,则不包括上述标头。但是,如果可以访问它,则完全可以这样做。

Fetch/CORS规范的作者在一篇相关的博客中做了更详细的介绍:

用< code > Access-Control-Allow-Origin:* 扩充任何资源都是完全安全的,只要该资源不是内部网的一部分(在防火墙后面)。换句话说,您可以使用< code>wget或< code>curl从互联网上的服务器获取URL。对于您的基本网站,这包括网站上的所有资源。< code > Access-Control-Allow-Origin 头(CORS的一部分)告诉浏览器资源可以共享。

即使资源在请求中包含基于cookie或HTTP身份验证数据的机密信息,包含标头并共享资源仍然是安全的,因为浏览器将在没有任何cookie或HTTP身份验证数据的情况下发出请求。如果浏览器使用cookies或HTTP认证数据发出请求,它将永远不会共享资源,因为这将需要一个额外的头< code > Access-Control-Allow-Credentials 和一个不同的头值。

因此,请继续并安全地与其他应用程序共享您的公共数据!

 类似资料:
  • 我有一个网络服务,比如: 在链接中: 我正在尝试通过链接中的AlFresco获取此Web服务的响应:。我现在有不同的端口(当我有相同的端口时,这很好地工作),所以,使用不同的端口,我在AlFresco中得到错误: 跨源请求被阻止:同一源策略不允许在以下位置读取远程资源:http://localhost:8081/ChangesPDF/Changes?...(原因:缺少CORS的“访问控制允许原点”

  • Access-Control-Allow-Origin响应 header 指示是否该响应可以与具有给定资源共享原点。 Header type Response header Forbidden header name no 语法 Access-Control-Allow-Origin: *Access-Control-Allow-Origin: <origin> 指令 * 对于没有凭据的请求,服务

  • 问题内容: 我使用球衣JAX-Rs作为Web服务来查询mysql。我尝试通过混合移动应用程序使用Web服务。 我指的是这个 http://coenraets.org/blog/2011/11/building-restful-services-with-java- using-jax-rs-and-jersey-sample- application/#comment-440541 在服务器端,以

  • 问题内容: 我试图在node.js中允许CORS,但是问题是我无法设置为if 。 另外规范说我不能为数组或逗号分隔值,建议的方法是做类似于此Access-Control-Allow-Origin多源域的操作?但是我似乎无法在node.js中这样做 这里的问题是它会被数组中的最后一个值覆盖,因此标头将设置为 来自客户端浏览器的错误: XMLHttpRequest无法加载http://mydomain

  • null 服务器的响应如下: XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。Access-Control-Allow-Origin不允许Origin 。 如何解决此问题?

  • 我认为浏览器在被响应时使用了它的缓存,并发现被缓存为的资源,因此拒绝满足请求。 我怎样才能缓解这里的问题?有什么想法吗?