【问题标题】:php csrf protection libraryphp csrf 保护库
【发布时间】:2011-01-25 12:01:31
【问题描述】:

是否有任何库可以防止 CSRF(PHP5.1/5.2) 或者我需要自己创建?我使用来自Chris 的这个 sn-p,但是如果没有库,我会在每一页上得到很多重复。

我为 PHP5.3 找到了这个 library,但我想知道 PHP5.1/5.2 上是否有,因为我不相信所有托管都支持 PHP5.3。

【问题讨论】:

  • 自己写很容易。
  • @zerkms 我已经开始这样做了,但如果可能的话你应该重用软件..
  • @Alfred:它是:1)一个生成随机令牌并将其存储在会话中的小函数 2)一个粘贴隐藏字段的小助手 3)一个验证的小函数。寻找准备好的东西并浪费时间将其适应您的基础架构是不值得的。
  • @zerkms 你说的有点对,但也需要时间,如果有图书馆,那么如果你问我,其他人可以保证这段时间!
  • @Alfred:你在 3 小时前问过这个问题。在此期间,至少可以从头开始实施三倍 ;-)

标签: php csrf


【解决方案1】:

自从我使用 Kohana 以来,我刚刚扩展了它的几个核心类。它可以在任何代码中使用,但只需稍作改动:

class Form extends Kohana_Form
{
  public static function open($action = NULL, array $attributes = null)
  {
      if (is_null($action))
      {
          $action = Request::current()->uri . ($_SERVER['QUERY_STRING'] ? '?' . $_SERVER['QUERY_STRING'] : '');
      }

    $open = parent::open($action, $attributes);
    $open .= parent::hidden(self::csrf_token_field(), self::csrf_token());
    return $open;
  }

  public static function csrf_token_field()
  {
    return 'csrf_token';
  }

  public static function csrf_token()
  {
    $session = Session::instance();
    $token = $session->get(self::csrf_token_field());

    if (!$token)
    {
      $session->set(self::csrf_token_field(), $token = md5(uniqid()));
    }

    return $token;
  }
}

class Validate extends Kohana_Validate
{
    public function __construct(array $array, $csrf = true)
    {
        parent::__construct($array);
        if ($csrf)
            $this->add_csrf();
    }

    public static function factory(array $array, $csrf = true)
    {
        return new Validate($array, $csrf);
    }

    private function add_csrf()
    {
        $this->rules(form::csrf_token_field(), array(
            'not_empty' => array(),
            'csrf' => array()
        ));
    }

    protected function csrf($token)
    {
        return $token == form::csrf_token();
    }

}

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 2020-12-18
    • 2018-05-27
    • 2012-10-08
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    相关资源
    最近更新 更多