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

具有动态cors头的API漏洞

许俊晤
2023-03-14

我一直在阅读如何正确保护支持动态cors头的API。不确定我是否完全理解任何子域的通配符问题。

if (preg_match('|\.?my-site.com$|', $_SERVER['SERVER_NAME'])) {
   header('Access-Control-Allow-Origin: *');
   header('Vary: Origin,Accept-Encoding');
}

说明:我的API同时支持HTTP和HTTPS,前面是清漆

  1. 使用访问控制允许来源:与发出请求的实际来源相比是否有缺点?
  2. 通过添加Vary:Origin,Accept Encoding,我可以获得哪些安全好处?当我读到缓存中毒时,我读到了对它们的需求,但不能说我理解这里的含义

共有2个答案

皇甫树
2023-03-14
  1. 您可以在这里找到一个很酷的答案:设置访问控制允许源代码有哪些安全风险

让我们假设你持有一个银行网站,它使用基于cookie的会话。编写访问-控制-允许-起源:*将允许任何网站使用您用户的cookie从其网站运行Ajax请求到您的银行网站,因此,您的用户的会话。所以他们可以访问用户连接时可以访问的任何东西:-)

Vary:Accept Encoding基本上告诉服务器在编码相同时从缓存加载页面,并重新生成页面以进行另一种编码。下面是上面一页中的一段引文,它解释了一个有用的案例:

想象两个客户端:一个没有压缩的旧浏览器,一个有压缩的现代浏览器。如果它们都请求相同的页面,则根据首先发送请求的人,压缩或未压缩版本将存储在CDN中。现在问题开始了:旧浏览器可以要求常规的“index.html”并获取缓存的压缩版本(随机垃圾数据),或者新浏览器可以获取缓存的未压缩版本并尝试“解压”。不管怎样,都是坏消息。

公冶峰
2023-03-14

使用访问控制允许来源:与发出请求的实际来源相比是否存在缺陷?

问题中概述的这种情况的唯一缺点是,如果您希望在请求中包含凭据,那么如果访问控制允许源站值为*,则不能。请参阅MDN HTTP访问控制(CORS)文章中的认证请求和通配符。

因此,看起来你可能想要做的是,让你的PHP代码获取Origin请求头的值,并在Access-Control-允许-Origin值中回响该值:

if (preg_match('|\.?my-site.com$|', $_SERVER['SERVER_NAME'])) {
   header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
   header('Vary: Origin,Accept-Encoding');
}

不确定我是否完全理解任何子域的通配符问题。

允许来自任何来源的请求存在问题的唯一情况是,您的服务在intranet内或防火墙后运行。

请参阅上的相关答案,为公共和只读Web服务启用CORS*是否安全

 类似资料:
  • 虽然已经通过API网关设置了CORS,并且设置了头,但在尝试在Chrome内从AJAX调用API时,我仍然收到以下错误: XMLHttpRequest无法加载http://xxxxx.execute-api.us-west-2.amazonaws.com/beta/yyyyy。请求的资源上没有“access-control-allow-origin”标头。因此不允许访问源“null”。响应的HTT

  • 当应用程序中使用的库和框架等组件几乎总是以完全权限执行时,就会发生这种威胁。如果利用易受攻击的组件,则会使黑客的工作更容易导致严重的数据丢失或服务器接管。 让我们来了解这个漏洞的威胁代理,攻击向量,安全弱点,技术影响和业务影响。 威胁代理 - 使用自动化工具识别和利用的框架。 攻击者的方法 - 攻击者通过扫描或手动分析识别组件。 安全弱点 - 识别所使用的组件是否在应用程序的深处变得更加复杂。 如

  • 我需要在输入 JSON 下方转换以输出 JSON,但不确定如何为该输出编写规范。比较 JOLT 转换中的归档值 输入: 预期输出: 在标题部分需要有名称、描述和id。任何建议都将不胜感激。在标题部分需要有名称、描述和id。任何建议都将不胜感激。

  • 我想知道是否有什么方法可以使属性值动态。类似于这样: 感谢您的反馈。在我的例子中,属性值是系统特定的,应该在测试运行时生成。

  • 当您使用网关创建API并映射自定义域时,AWSAPIGateway会在cloudfront发行版中创建一个条目 来源:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html 对于您创建的每个API,API网关都会为该API设置Amazon CloudTop分发。使用默认API UR

  • 问题内容: 我有一个简单的PHP脚本,正在尝试跨域CORS请求: 但是我仍然得到错误: 请求标头字段不允许 我有什么想念的吗? 问题答案: 不允许作为可接受的值,请参阅此处的Mozilla文档。 您应该发送可接受的标头(而不是如星号所示)而不是星号。