Ham*_*eni 108 security ajax cors
我最近不得不设置Access-Control-Allow-Origin为*能够进行跨子域ajax调用.
现在我不禁觉得我的环境存在安全风险.
如果我做错了,请帮助我.
Gum*_*mbo 58
通过响应Access-Control-Allow-Origin: *,请求的资源允许与每个源共享.这基本上意味着任何站点都可以向您的站点发送XHR请求并访问服务器的响应,如果您没有实现此CORS响应,则不会出现这种情况.
因此,任何网站都可以代表其访问者向您的网站提出请求并处理其响应.如果您的某些实现类似于基于浏览器自动提供的内容的身份验证或授权方案(Cookie,基于cookie的会话等),则第三方站点触发的请求也将使用它们.
这确实带来了安全风险,特别是如果您不仅为所选资源而且为每个资源共享资源.在这种情况下,您应该看看何时启用CORS是安全的?.
Jaf*_*ake 30
Access-Control-Allow-Origin: *完全安全地添加到任何资源中,除非该资源包含受非标准凭据(Cookie,基本身份验证,TLS客户端证书)以外的内容保护的私有数据。
想象一下https://example.com/users-private-data,根据用户的登录状态,它可能会公开私有数据。此状态使用会话cookie。添加到此资源是安全的Access-Control-Allow-Origin: *,因为只有在没有cookie的情况下发出请求,并且需要cookie才能获取私有数据时,此标头才允许访问响应。结果,没有私有数据泄漏。
想象一下https://intranet.example.com/company-private-data,它公开了私人公司的数据,但是只有当您在公司的wifi网络上时,才能访问该数据。这是不是安全添加Access-Control-Allow-Origin: *到这个资源,因为它使用比标准凭据以外的东西保护。否则,错误的脚本可能会将您用作通往Intranet的隧道。
想象一下,如果用户在隐身窗口中访问资源,将会看到什么。如果您对所有人都能看到此内容(包括浏览器收到的源代码)感到满意,则可以安全地添加Access-Control-Allow-Origin: *。
AFAIK,Access-Control-Allow-Origin只是从服务器发送到浏览器的http头.将其限制为特定地址(或禁用它)并不会使您的网站更安全,例如机器人.如果机器人想要,他们可以忽略标题.默认情况下,常规浏览器(Explorer,Chrome等)标记头.但像Postman这样的应用程序根本就忽略了它.
服务器端在返回响应时实际上不会检查请求的"起源"是什么.它只是添加了http标头.它是发送请求的浏览器(客户端),该请求决定读取访问控制头并对其进行操作.请注意,在XHR的情况下,它可能会使用特殊的"OPTIONS"请求来首先请求标头.
因此,任何具有创造性脚本功能的人都可以轻松忽略整个标题,无论其中设置了什么.
另请参阅设置Access-Control-Allow-Origin的可能的安全问题.
现在实际回答这个问题
我不禁觉得我的环境存在安全风险.
如果有人想要攻击你,他们可以轻松绕过Access-Control-Allow-Origin.但是通过启用"*",您可以为攻击者提供更多"攻击媒介",例如,使用支持HTTP标头的常规网络浏览器.
以下是作为评论发布的2个示例,当通配符确实存在问题时:
假设我登录了我银行的网站.如果我去另一个页面然后回到我的银行,我仍然因为cookie而登录.互联网上的其他用户可以像我一样在我的银行点击相同的URL,但如果没有cookie,他们将无法访问我的帐户.如果允许跨源请求,则恶意网站可以有效地冒充用户.
- 布拉德
假设您有一个普通的家用路由器,例如Linksys WRT54g或其他东西.假设路由器允许跨源请求.我的网页上的脚本可以向公共路由器IP地址(如192.168.1.1)发出HTTP请求,并重新配置您的路由器以允许攻击.它甚至可以直接将您的路由器用作DDoS节点.(大多数路由器都有测试页面,允许ping或简单的HTTP服务器检查.这些可能会被滥用.)
- 布拉德
我觉得这些评论应该是答案,因为他们用reallife例子解释了这个问题.
| 归档时间: |
|
| 查看次数: |
43077 次 |
| 最近记录: |