Codeigniter:Paypal IPN和csrf_protection

AFR*_*FRC 6 codeigniter paypal paypal-ipn codeigniter-2

我正在使用codeigniter-paypal-ipn并启用了csrf_protection.这似乎阻止了从Paypal到我的IPN控制器的访问.如果我禁用csrf_protection它工作正常,启用csrf_protection,paypal IPN服务会抛出500内部服务器错误.

有没有办法在不禁用csrf_protection的情况下解决这个问题?如果没有,我可以为该控制器禁用csrf_protection吗?

谢谢.

cas*_*mcl 13

我知道这个问题已经得到解答,但是我在没有破解CI核心的情况下以类似的方式做到了.我将以下内容添加到我的application/config/config.php文件中:

$config['csrf_ignore'] = array('api');
Run Code Online (Sandbox Code Playgroud)

该数组可以包含您喜欢的任何路径.上面的示例将适用于以"api"开头的任何路径.

然后,我添加了以下文件:application/core/MY_Input.php:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Input extends CI_Input
{
    function _sanitize_globals()
    {   
        $ignore_csrf = config_item('csrf_ignore');

        if (is_array($ignore_csrf) && count($ignore_csrf))
        {
            global $URI;
            $haystack = $URI->uri_string();

            foreach($ignore_csrf as $needle)
            {
                if (strlen($haystack) >= strlen($needle) && substr($haystack, 0, strlen($needle)) == $needle)
                {
                    $this->_enable_csrf = FALSE;
                    break;
                }
            }           
        }

        parent::_sanitize_globals();
    }
}
/* EOF: MY_Input */
Run Code Online (Sandbox Code Playgroud)


Ale*_*ean 4

Alex 是codeigniter-paypal-ipn的创建者。目前我不知道如何让 IPN 帖子在启用 csrf_protection 的情况下工作。如果你看看另一种语言/框架是如何做到这一点的,例如 django-paypal IPN - 他们为特定的 IPN 控制器添加了 CSRF 豁免

正如imm所说,在合并具有此拉取请求的版本之前,这种类型的细粒度控制将无法在 CodeIgniter 中使用(如果您等不及,请尝试下面的caseyamcl方法,因为它不涉及黑客 CI 核心...)

我已经更新了项目的README,以使 CSRF 情况更加清晰。