Codeigniter: Paypal IPN и csrf_protection - PullRequest
       14

Codeigniter: Paypal IPN и csrf_protection

6 голосов
/ 02 октября 2011

Я работаю с codeigniter-paypal-ipn и у меня включена функция csrf_protection.Это, кажется, блокирует доступ от Paypal к моему контроллеру IPN.Если я отключаю csrf_protection, он работает просто отлично, с включенным csrf_protection, служба IPN PayPal выдает 500 Внутренняя ошибка сервера.

Есть ли способ решить эту проблему без отключения csrf_protection?Если нет, могу ли я отключить csrf_protection только для этого контроллера?

Спасибо.

Ответы [ 3 ]

13 голосов
/ 09 октября 2011

Я знаю, что на вопрос был дан ответ, но я сделал это аналогичным образом, не взломав ядро ​​CI.Я добавил следующее в файл application / config / config.php:

$config['csrf_ignore'] = array('api');

Массив может содержать любые пути, которые вам нравятся.Приведенный выше пример будет применяться ко всем путям, начинающимся с '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 */
4 голосов
/ 03 октября 2011

Алекс создатель codeigniter-paypal-ipn здесь. На данный момент я не знаю, как заставить пост IPN работать с включенной функцией csrf_protection. Если вы посмотрите, как это делает другой язык / фреймворк, например, django-paypal IPN - они добавляют исключение CSRF для конкретного контроллера IPN .

Как говорит imm , этот тип детального управления не будет доступен в CodeIgniter до тех пор, пока не будет объединена версия с этим запросом (если вы не можете ждать, попробуйте caseyamcl подход ниже, так как он не включает взлом ядра CI ...)

Я обновил README моего проекта, чтобы прояснить ситуацию с CSRF.

2 голосов
/ 02 октября 2011

Кто-то задал похожий вопрос на http://ellislab.com/forums/viewthread/200625/, отключение csrf для одного контроллера будет доступно в следующем выпуске.

...