这个CORS处理程序安全吗?

maa*_*nus 6 java cors

我写了这个简单的方法来处理我的简单服务器代理中的CORS.

private void handleCors(HttpServletRequest req, HttpServletResponse resp) {
  final String origin = req.getHeader("Origin");
  if (Strings.isNullOrEmpty(origin)) {
    return;
  }
  if (!origin.startsWith("http://localhost:")) {
    return;
  }
  resp.setHeader("Access-Control-Allow-Origin", origin);
  resp.setHeader("Access-Control-Allow-Credentials", "true");
  resp.setHeader("Access-Control-Expose-Headers", "Authorization");
  resp.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
}
Run Code Online (Sandbox Code Playgroud)

实际应用程序不需要它,它仅在手动测试时使用(带ionic serve).我想,这是安全的,因为除了原点是localhost之外什么都不做,但比抱歉更安全.

此外,findbugs抱怨响应分裂漏洞.我应该简单地使用URLEncoder.html#encode还是有更多内容吗?

一般去掉空格或包含空格的情况下做的没有加入CORS标头?

Sky*_*ker 4

CORS 比 JSONP 等早期技术更安全、更灵活。

\n\n

WebAPI 开箱即用,可以很好地处理GET请求。但是,一旦您开始使用它进行POST, PUT or DELETE操作,CORS 就会启动并删除对服务器的请求。CORS 会停止任何跨域请求,因此如果您的 api 正在运行www.myapi.com并且来自的请求www.mywebsite.com进来,则该请求将被丢弃。这是一项安全功能,可确保来自未知域的请求无法到达服务器。

\n\n

如果您使用 Web 客户端执行 ajax 调用,那么您还需要在 ajax 调用中添加一件事,以确保 CORS 出现在所有浏览器上。

\n\n
$.support.cors = true\ncrossDomain: true\n
Run Code Online (Sandbox Code Playgroud)\n\n

资源链接:

\n\n

如何在 WebAPI 中实现跨域请求 (CORS)?

\n\n
\n

但在一行中,如果我们想说 CORS 处理程序不安全。\n @zapl已经给出了有关此的信息。

\n
\n\n

现在我试图给你一些攻击类型和一些场景。希望它能为您提供清晰的信息。

\n\n

CORS(在)安全性方面?

\n\n
    \n
  1. 一些安全问题是由于 CORS 的不正确实现而引起的,最常见的是在服务器标头中使用通用允许符号 (*)。
  2. \n
  3. 客户端不应完全信任收到的内容,并在未经清理的情况下评估或渲染内容,这可能会导致信任错误。
  4. \n
  5. 允许 CORS 的应用程序可能容易受到 CSRF\n攻击。
  6. \n
  7. 长时间缓存预检响应可能会导致因滥用预检客户端缓存而引发的攻击。
  8. \n
  9. 基于 Origin 标头的访问控制决策可能会导致\n漏洞,因为这可能会被攻击者欺骗。
  10. \n
\n\n

CORS 安全 - 通用允许

\n\n
    \n
  • 将“Access-Control-Allow-Origin”标头设置为 *
  • \n
  • 有效地将内容转变为公共资源,允许从任何域\n进行访问。
  • \n
\n\n
\n

应用场景:

\n\n
    \n
  • 攻击者可以通过诱使用户访问
    Internet 上攻击者控制的站点来从已将此标头设置为 * 的 Intranet 站点窃取数据。

  • \n
  • 当受害者导航到攻击者控制的站点时,攻击者可以通过受害者\xe2\x80\x99s 浏览器对其他远程应用程序进行攻击。

  • \n
\n
\n\n
\n\n

CORS 安全 \xe2\x80\x93 信任错位

\n\n
    \n
  1. 两个域之间的数据交换基于信任
  2. \n
  3. 如果参与数据交换的其中一台服务器\n受到威胁,那么 CORS 模型就会面临风险
  4. \n
\n\n
\n

应用场景:

\n\n
    \n
  • 攻击者可以危害站点 A 并托管恶意内容,因为知道站点 B 信任站点 A 通过 CORS\n 请求发送到站点 B 的数据,从而导致 XSS 和其他攻击。
  • \n
  • 攻击者可以危害站点 B 并使用站点 A 中公开的 CORS 功能来攻击站点 A 中的用户。
  • \n
\n
\n\n

CSRF 与 CORS

\n\n
    \n
  1. 服务器可以处理客户端请求以更改服务器端数据,同时\n验证 Origin 标头是否已设置
  2. \n
  3. 攻击者可以使用 XHR 的 .withCredentials = \xe2\x80\x9ctrue\xe2\x80\x9d 属性\n将任何 cookie 重播到受害者登录的应用程序\n
  4. \n
\n\n
\n

应用场景:

\n\n
    \n
  • 攻击者设置 Origin 标头或使用可信站点 A 向站点 B 发送非幂等请求。
  • \n
  • 受害者在查看可信站点 A 时登录站点 B,导致站点 B 在他不知情的情况下
    通过 CSRF 攻击\n 创建用户帐户。
  • \n
\n
\n\n

CORS \xe2\x80\x93 预检响应的缓存

\n\n
    \n
  1. Access-Control-Max-Age 标头设置为较高值,允许浏览器缓存预检响应。
  2. \n
  3. 长时间缓存预检响应可能会带来安全风险。\n
  4. \n
  5. 如果服务器上的 COR 访问控制策略发生更改,\n浏览器仍将遵循预检\n结果缓存中可用的旧策略。
  6. \n
\n\n

CORS \xe2\x80\x93 基于Origin的访问控制

\n\n
    \n
  1. Origin 标头指示请求来自特定\n域,但不保证这一点。
  2. \n
  3. 如果访问基于此标头,则欺骗 Origin 标头允许访问该页面\n
  4. \n
\n\n
\n

应用场景:

\n\n
    \n
  • 攻击者设置 Origin 标头来查看受限制的敏感信息
  • \n
  • 攻击者使用 cURL 设置自定义原始标头:
  • \n
\n
\n\n
     curl --header \'origin:http://someserver.com\' http://myserver.com:90/demo/origin_spoof.php\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里给出一个例子。您可以通过此链接:

\n\n
    \n
  1. https://www.owasp.org/index.php/Test_Cross_Origin_Resource_Sharing_(OTG-CLIENT-007)
  2. \n
  3. HTML5 CORS 的一些安全影响或如何使用浏览器作为代理\n
  4. \n
\n