Реализация CSRF в OpenID iframe - PullRequest
       38

Реализация CSRF в OpenID iframe

3 голосов
/ 07 января 2011

Я реализовал Janrain Open ID на своем сайте Codeigniter 2.0.Он работал прекрасно, пока я не включил защиту CSRF в своем конфигурационном файле codeigniter.

Я прочитал об этом, и мне кажется, что во всех моих формах на моем веб-сайте я должен включать скрытый элемент формы, содержащий токен, которыйзатем проверяется по токену cookie после того, как сообщение прочитано с получающей страницы.

Это все прекрасно, но я немного застрял, когда пытаюсь зайти на свой сайт сейчас, используя OpenID (из которых форма входа в систему взята из iframe, размещенного на janrain.com) Я не могу включить какие-либо скрытые значения записей, потому что не могу контролировать, как выглядит форма, и могу предоставить только возвращаемый URL, чтобы janrain знал, чтостраницу, на которую я должен вернуться.

Как я могу получить свой CSRF-токен для отправки вместе с формой, если форма находится в фрейме, который я не контролирую?

Ответы [ 3 ]

1 голос
/ 29 августа 2011

Вы также можете просто добавить это в конец URL вашего токена:

?ci_csrf_token='.$this->security->get_csrf_hash()

Итак, предположим, что вы использовали встроенный iframe для Janrain, весь код в итоге выглядел бы так:

<iframe src="https://MYACCOUNT.rpxnow.com/openid/embed?token_url=<?PHP echo rawurlencode($token_url).'?ci_csrf_token='.$this->security->get_csrf_hash(); ?>" scrolling="no" frameborder="0" seamless="seamless" style="width:400px; height:240px;"></iframe>

У меня это отлично работает на моем codeigniter, и вам не нужно отключать вашу безопасность CSRF:)

0 голосов
/ 09 марта 2011

Я также искал решение, как отключить CSRF для контроллера. Я сделал это так:

if(stripos($_SERVER["REQUEST_URI"],'/controller') === FALSE)
{
    $config['csrf_protection'] = TRUE;
}
else
{
    $config['csrf_protection'] = FALSE;
}

в config.php Я не знаю, надежно ли это, но у меня работает.

0 голосов
/ 07 января 2011

Понял.Я отправил в iframe свой обратный URL-адрес, в который я включил токен CSRF как часть URL-адреса.Когда Janrain возвращается к моему возвращаемому URL, когда Codeigniter проходит проверку безопасности внутри Security :: csrf_verify (), я провожу небольшую проверку по URL, чтобы проверить, совпадают ли мои токены (к сожалению, по какой-то причине я не смог использовать библиотеки CIтаким образом, я закончил синтаксический анализ URL, используя explode ('/', $ _SERVER [REQUEST_URI])).Если я нахожу в URL-адресе мой токен cookie csrf, то у нас все хорошо, и я не проверяю переменные POST, как обычно делает Codeigniter.

...