2011-03-20 24 views
7

Tengo un problema de protección de CSRF muy extraño en CodeIgniter. Me he asegurado de usar form_open para iniciar mi formulario, csrf_protection se establece en true en el archivo de configuración y también me he asegurado de que los campos de nombre y valor de csrf ocultos coincidan con la cookie csrf como se ve aquí: http://d.pr/3cfB.Problema de token de CSRF con CodeIgniter

Lo que sucede es que cuando envío el formulario, aparece "Se ha encontrado un error. La acción que ha solicitado no está permitida". error y no estoy seguro de por qué. El formulario funciona bien cuando desactivo csrf_protection.

Lo que es aún más extraño es que utilizo la biblioteca tank_auth para mi autenticación y también usa form_open para el formulario de inicio de sesión. Revisé para asegurarme de que haya un campo csrf oculto en el formulario de inicio de sesión cuando csrf_protection está activado y pude enviar el formulario e iniciar sesión sin ningún problema.

¿Qué puedo hacer para solucionar este problema?

Respuesta

1

Encontré el problema. En una de mis bibliotecas personalizadas tengo parent :: _ sanitize_globals() que aparentemente fue lo que está causando el error. Leí en alguna parte que si tengo el filtro xss activado, no necesito desinfectarlo globalmente.

1

Para empezar, la clase de sesión espera un token llamado 'csrf_token_name', no uno llamado 'csrf_salemarked_token $ ...'.

Esta publicación de blog cubre AJAX with CSRF Protection in Codeigniter 2.0.

Tank_auth obtiene el token del campo de formulario de entrada oculto, en lugar de la cookie. Sus solicitudes AJAX necesitan obtener el token del campo oculto si está disponible, o la cookie si no hay un formulario.

+0

hmmm, no estoy seguro de estar de acuerdo contigo en esto. algunas cosas: primero, csrf_token_name es parte de la configuración de CI - http://d.pr/lQHG, por lo que 'csrf_salemarked_token $ ...' era el nombre del token. segundo, no estoy tratando de hacer ninguna presentación de formulario Ajax. en tercer lugar, creé mi formulario del mismo modo en que tank_auth creó su formulario, lo he verificado dos veces y ambos formularios tienen una entrada oculta con el nombre y el valor del token csrf. –

+0

woof ... tienes razón sobre el nombre del token. de alguna manera no migré el nuevo archivo de configuración cuando actualicé – coolgeek