elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Pregunta]: Anti-CSRF 2.0 (Dilema)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: Anti-CSRF 2.0 (Dilema)  (Leído 3,023 veces)
Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
[Pregunta]: Anti-CSRF 2.0 (Dilema)
« en: 4 Diciembre 2019, 13:30 pm »

Buenos días,

hasta día de hoy mi protección para ataques CSRF es generar un token de seguridad o aleatorio para cada formulario, es decir si yo entro a la pagina login, efectivamente me va a generar un token con el nombre del formulario, "token_csrf_form_login" quedando así $_SESSION['token_csrf_form_login"] después si entro a el formulario de registro $_SESSION['token_csrf_form_registry'] cada una de estas sessiones va a tener un token diferente pero hay un problema con este método y es que si la persona esta con dos formularios iguales a la misma vez se va a generar un problema...

[Page A (Registry)] [Page B (Registry)]

Primero va a generar un tocken para form_registry, después cuando vuelva a abrir el mismo formulario desde otra ventana o pestaña va a volver a generar el token y va a dejar obsoleto el anterior, por lo que el formulario que se abrió primero quedará inoperable, va a terminar dando un error para la primera pestaña o ventana que haya.. cargado el formulario antes.

Buscando por ahí varias formas de crear token se sigue un patrón (es material del 2011 a el 2014) generar el token una vez que el usuario se logea.

[Usuario inicia sesión]
[Genera tocken anti CSRF] => $_SESSION['token_csrf'] = [Dato aleatorio];
y todos los formularios u otros métodos que requieran este tipo de seguridad van a compartir el mismo token (por lo menos hasta que el usuario se desconecte, ahí ya se destruyen todas las sessiones).

¿Qué opinan de esto? ¿Se inclinan por la opción A u opción B?


En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: Anti-CSRF 2.0 (Dilema)
« Respuesta #1 en: 4 Diciembre 2019, 14:14 pm »

Lo que podrías hacer es no invalidar el token si el usuario vuelve a abrir el formulario (no reescribir el token si ya hay una entrada) y simplemente reusar el token anterior. De forma que en lugar de tener un token por sesión tienes un token único por sesión por cada formulario.


En línea

Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Pregunta]: Anti-CSRF 2.0 (Dilema)
« Respuesta #2 en: 4 Diciembre 2019, 14:18 pm »

Lo que podrías hacer es no invalidar el token si el usuario vuelve a abrir el formulario (no reescribir el token si ya hay una entrada) y simplemente reusar el token anterior. De forma que en lugar de tener un token por sesión tienes un token único por sesión por cada formulario.

¡Tenes razón!
¿Como se me pasó? jaja GRACIAS ya lo hago!  ;-) ;-) ;-) ;-)
En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: [Pregunta]: Anti-CSRF 2.0 (Dilema)
« Respuesta #3 en: 4 Diciembre 2019, 15:32 pm »

Hace tiempo, cuando te pase la funcionalidad de generar y comprobar tokens, esa parte estaba prevista pues podrías generar y validar tokens diferentes...

https://foro.elhacker.net/php/problema_sistema_anti_ataques_csrf-t499970.0.html;msg2206334#msg2206334


Código
  1. $token1 = createToken('formulario1');
  2. $token2 = createToken('formulario2');
  3.  
  4. // ---------------------------
  5.  
  6. if (isset($_POST['token_form_1']) && validateToken('formulario1', $_POST['token_form_1'])) {
  7.    echo 'token valido';
  8. }
  9.  
  10. if (isset($_POST['token_form_2']) && validateToken('formulario2', $_POST['token_form_2'])) {
  11.    echo 'token valido';
  12. }


Por supuesto, también es valida y hasta casi me parece mejor la idea de usar un token por página en vez de por formulario.

Saludos
En línea

Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Pregunta]: Anti-CSRF 2.0 (Dilema)
« Respuesta #4 en: 4 Diciembre 2019, 15:47 pm »

Gracias!

Si, igual es un muy buen sistema el Anti-CSRF que me pasaste ahora lo voy a mejorar un poco más.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Anti-CSRF Filter Bypass SMF 2.0 / 1.1.14
Nivel Web
Preth00nker 0 3,229 Último mensaje 25 Agosto 2011, 21:31 pm
por Preth00nker
[Problema]: Sistema anti ataques (CSRF)
PHP
Leguim 5 2,593 Último mensaje 16 Octubre 2019, 23:01 pm
por Leguim
[Pregunta]: ¿Anti-XSS y Anti-Inject?
Desarrollo Web
Leguim 7 3,627 Último mensaje 24 Octubre 2019, 03:18 am
por @XSStringManolo
[Pregunta]: Token CSRF
Desarrollo Web
Leguim 4 2,906 Último mensaje 4 Diciembre 2019, 05:17 am
por @XSStringManolo
[Aporte]: Sistema Anti ataques CSRF
Desarrollo Web
Leguim 4 3,969 Último mensaje 23 Diciembre 2019, 03:26 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines