【问题标题】:Security risks with enabling CORS启用 CORS 的安全风险
【发布时间】:2014-10-29 06:50:37
【问题描述】:

我正在使用 CakePHP 2.3.8,我想为我的一些操作启用 CORS,以便能够处理来自其他域的请求。我有一个使用网络书的支付处理器,除了我想使用的其他功能之外,我还想使用该功能。

这是一个两部分的问题

  1. 如果我在特定函数上启用 CORS,这是否意味着该函数是唯一可以接受来自其他域的请求的函数(假设它是唯一启用的函数)?

例如,假设我有以下操作/方法...

public function cors_enabled(){
    $this->response->header('Access-Control-Allow-Origin', '*');
    echo "other domains can access this";
}

public function cors_not_enabled(){
    echo "good luck getting this content!";
}

如果来自另一个域的人试图访问“cors_enabled”功能,他们会看到“其他域可以访问这个!”消息,但如果他们试图访问“cors_not_enabled”功能,则不允许。这是正确的吗?

  1. 假设我确切地知道我在 POST/GET 数据中查找的内容并对其进行验证,我是否面临任何重大安全风险?是的,其他域可以访问特定的 URL,但假设我有适当的验证并且我确切地知道我在寻找什么,我需要考虑其他任何因素吗?

【问题讨论】:

  • 定义什么是 CORS ???不是每个人都知道 CORS 的含义
  • @jQueryAngryBird 这不是傻瓜的自动机制,这是 StackOverflow,我们是程序员,CORS 是一种非常知名的技术,如果有人不知道它是什么,好吧,这个问题有 the cors tag 集来解释它是关于什么的。

标签: php security cakephp cors


【解决方案1】:
  1. 如果您没有启用 CORS 的特定标头:
    $this->response->header('Access-Control-Allow-Origin', '*');
    CORS 将被禁用,其他域将无法连接。

    1. 如果您在 POST 数据中放入一些授权令牌,然后在代码中处理此令牌,那么端点保持打开状态是安全的。
      但是,此令牌不应是静态的,否则从长远来看它是不安全的。
      通常的做法是用一些盐对时间戳进行哈希处理并将其用作授权令牌。

【讨论】:

  • 这是浏览器阻止跨域发出请求的行为。如果是 POST 请求,浏览器会预先飞行到 Corss 服务器并检查服务器是否具有 Access-Control-Allow-Origin标题与否。允许 * 是不好的。它允许所有域,您可以限制可以发布到您的应用程序购买的目标域,您可以缩小攻击面。
  • @AntoanMilkov ,那么只有启用了 CORS 的函数/方法才能从其他域访问,而没有启用它的函数/方法则不能?我不确定是否以一种方法启用它以某种方式在站点范围内启用它。
  • @PankajDey 说得好。就像我理解的那样(出于学习目的),假设我确切地知道我在请求中寻找什么。如果我让它对所有域开放(意思是"*")并验证传入的请求,那会更不安全吗?例如,假设我期望 POST 值为“dog”。如果有人发送带有“cat”的帖子请求,我不会允许该请求,但如果发送“dog”,那么我将继续清理和处理请求。
  • Cors 允许 csrf 攻击。如果允许所有是必要的部分,我们需要去防伪令牌。因为它与上面的概念几乎相同。
  • @user3476345 是的,它是安全的,但要确保每个请求的值 'dog' 都不同,并且没有人可以猜测确切的值。询问您是否需要更多帮助。另请阅读 CSRF:en.wikipedia.org/wiki/Cross-site_request_forgery
猜你喜欢
  • 2013-08-29
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 2013-07-07
相关资源
最近更新 更多