CodeIgniter CSRF confusión

4

He estado trabajando con CodeIgniter durante aproximadamente 3 semanas y estoy muy en camino de amar este marco. Sin embargo, he estado viendo el código central del marco y estaba leyendo sobre la protección CSRF. Vi (la falta de) la regeneración CSRF. Todo lo que hace es extender la vida de los tokens. Esto me está poniendo muy nervioso. Jugué con los tiempos de vencimiento y no puedo hacer que caduque una vez cada dos minutos. Haría mi aplicación inutilizable, ya que se basa principalmente en el envío del formulario.

Mi pregunta es ¿por qué alguien NO querría que un token se regenere por solicitud / por formulario?

¿Es esta una buena práctica mantener el mismo token? He estado leyendo OWASP y aparte de los campos ocultos en un formulario, otras soluciones están usando CAPTCHA, pero eso también rompería mi aplicación ya que los usuarios no quieren eso. En general, estoy muy confundido en cuanto a por qué esto es así.

Solo por un poco de información adicional, esto es lo que estoy haciendo para evitar cualquier fuga de información:

  1. SSL / TLS (https) en toda la aplicación
  2. Eliminar firmas del servidor en los encabezados
  3. configure una clave de cifrado de 64 claves para la información personal y las cookies
  4. Xss filtra todas las publicaciones para obtener cookies
  5. validar todo
  6. Escape todo lo que se derive de los datos ingresados por el usuario.

y las siguientes son mis configuraciones para la seguridad de CI:

    $config['cookie_secure']    = TRUE; // Send cookies only over HTTPS
    $config['global_xss_filtering'] = TRUE; // Global xss filter (input only- i escape output when needed) 
    $config['sess_encrypt_cookie']  = TRUE; // "encrypts" session with my 64 Character encryption key
    $config['sess_time_to_update']  = 10; // regenerate session id every 10 seconds

Lo siento si esta publicación es larga y extensa. Solo quiero asegurarme de que estoy tomando todos los pasos necesarios para la seguridad de la aplicación.

Gracias

    
pregunta RaGe10940 18.02.2013 - 22:38
fuente

1 respuesta

4

¿Bajo qué condiciones debería una aplicación regenerar un token de sincronización CSRF?

El atributo más importante es que este valor no puede ser adivinado por un atacante y, por lo tanto, exclusivo de una sesión. Los tokens de sincronización son comúnmente derrotados usando XSS. Un buen ejemplo es el gusano Sammy MySpace XSS , que lee el token CSRF utilizando un XHR y presentó la solicitud. Entonces, incluso si el token de sincronización se regenera para cada página , aún caerá en un ataque XSS. (Además, las variables de las cookies no son un vector para XSS porque un atacante no puede controlar estas variables en la solicitud).

Un atacante tiene la ventaja de que puede realizar una gran cantidad de solicitudes. Es posible que un atacante adivine el token CSRF utilizado. Del mismo modo, también es posible que un atacante pueda adivinar el ID de sesión utilizado. Ambos ataques tienen un impacto idéntico, un atacante puede realizar una acción como ese usuario. Debería haber algún tiempo de espera para evitar estos dos ataques, pero este valor varía en su aplicación. ¿Es esta una aplicación bancaria que trata con dinero? Lo que debería expirar una sesión después de 20 o más minutos. O esto es solo un foro con un impacto limitado en la seguridad, en ese caso quizás 24 horas.

    
respondido por el rook 18.02.2013 - 23:48
fuente

Lea otras preguntas en las etiquetas