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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  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 840 veces)
Leguim


Desconectado Desconectado

Mensajes: 698



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
***
Conectado Conectado

Mensajes: 5.250


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: 698



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.736



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: 698



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 2,572 Último mensaje 25 Agosto 2011, 21:31 pm
por Preth00nker
[Problema]: Sistema anti ataques (CSRF)
PHP
Leguim 5 892 Último mensaje 16 Octubre 2019, 23:01 pm
por Leguim
[Pregunta]: ¿Anti-XSS y Anti-Inject?
Desarrollo Web
Leguim 7 1,154 Último mensaje 24 Octubre 2019, 03:18 am
por @XSStringManolo
[Pregunta]: Token CSRF
Desarrollo Web
Leguim 4 1,015 Último mensaje 4 Diciembre 2019, 05:17 am
por @XSStringManolo
[Aporte]: Sistema Anti ataques CSRF
Desarrollo Web
Leguim 4 1,196 Último mensaje 23 Diciembre 2019, 03:26 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines