我一直在阅读如何正确保护支持动态cors头的API。不确定我是否完全理解任何子域的通配符问题。
if (preg_match('|\.?my-site.com$|', $_SERVER['SERVER_NAME'])) {
header('Access-Control-Allow-Origin: *');
header('Vary: Origin,Accept-Encoding');
}
说明:我的API同时支持HTTP和HTTPS,前面是清漆
访问控制允许来源:
与发出请求的实际来源相比是否有缺点?Vary:Origin,Accept Encoding
,我可以获得哪些安全好处?当我读到缓存中毒时,我读到了对它们的需求,但不能说我理解这里的含义让我们假设你持有一个银行网站,它使用基于cookie的会话。编写访问-控制-允许-起源:*将允许任何网站使用您用户的cookie从其网站运行Ajax请求到您的银行网站,因此,您的用户的会话。所以他们可以访问用户连接时可以访问的任何东西:-)
Vary:Accept Encoding
基本上告诉服务器在编码相同时从缓存加载页面,并重新生成页面以进行另一种编码。下面是上面一页中的一段引文,它解释了一个有用的案例:
想象两个客户端:一个没有压缩的旧浏览器,一个有压缩的现代浏览器。如果它们都请求相同的页面,则根据首先发送请求的人,压缩或未压缩版本将存储在CDN中。现在问题开始了:旧浏览器可以要求常规的“index.html”并获取缓存的压缩版本(随机垃圾数据),或者新浏览器可以获取缓存的未压缩版本并尝试“解压”。不管怎样,都是坏消息。
使用访问控制允许来源:
与发出请求的实际来源相比是否存在缺陷?
问题中概述的这种情况的唯一缺点是,如果您希望在请求中包含凭据,那么如果访问控制允许源站
值为*
,则不能。请参阅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文档。 您应该发送可接受的标头(而不是如星号所示)而不是星号。