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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


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


Desconectado Desconectado

Mensajes: 720



Ver Perfil
[Pregunta]: Token CSRF
« en: 3 Diciembre 2019, 05:52 am »

Buenas noches,

Quería preguntarles porque yo tengo un sistema para evitar ataques CSRF en mi aplicació  web, logicamente estoy usando tokens para esto. Hasta ahora solamente los estoy usando para el envio de formularios (PHP) quería saber donde más ven necesario el uso de este "parcheado"?


En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: [Pregunta]: Token CSRF
« Respuesta #1 en: 3 Diciembre 2019, 10:09 am »

Cualquier acción que afecte al usuario de una manera o de otra. Cerrar sessión, cambiar de estado, actualizar algún dato, hacer una petición GET importante etc..

Saludos


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Re: [Pregunta]: Token CSRF
« Respuesta #2 en: 3 Diciembre 2019, 13:19 pm »

Como te dice Drvy, es cualquier acción que pieda hacer algo que el usuario pieda no desear. Por ejemplo si te mando Wikipedia y no usas token, te estaría desloggeando de la cuenta. Este link podría meterlo por ejemplo en mi página web o como foto de perfíl. En el caso de ponerlo de foto de perfíl, todo el mundo que viese mi imagen, por ejemplo tú ahora; seguiría el link de la imagen automáticamente por el navegador para descargarla, lo cual haría que todos los usuarios de Elhacker que viesen cualquiera de mis posts se desloggeasen automáticamente.

Otro ejemplo sería el de que yo meditante javascript haga submit a un form de elhacker.net por ejemplo: publicarPost.php
Si no existe token ni confirmación, podría hacer autosubmit del form desde mi web. Por lo que podría ir publicando nuevos temas y respondiendo a temas desde otras cuentas.

Por eso se añade sesc=jsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjs al link o hidden en el form y se valida en el servidor.

Deberías usar los tokens en todo lo que no sea una acción que no afecte de ninguna forma. Por ejemplo pinchar en el link de foro, o ayuda no entraña ningún riesgo.

Por temas relacionados también es recomendable evitar que se use tu web en iframes de páginas externas mandando la cabecera pertinente al navegador.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Pregunta]: Token CSRF
« Respuesta #3 en: 3 Diciembre 2019, 17:38 pm »

Imagino que voy a tener que actualizar o crear 2 sistemas anti CSRF totalmente diferentes ya que como hago para hacer un token para cada pagina (mejor dicho para cada pagina que use $_GET por ejemplo o cambie de estado)

ya que la manera en como lo hago no me va a servir para esto (si para los formularios) pero no para esto... (este método no me acuerdo bien quien me lo había pasado creo que era EdePC o !Drvy) lo había mejorado un poco y quedo así:

Código
  1. function Create_Token($name)
  2. {
  3. $result = 'Error';
  4.  
  5. if(is_string($name))
  6. {
  7. $token_new = 'token_'.($name);
  8. $token_old = 'token_old_'.($name);
  9.  
  10. if(isset($_SESSION[$token_new]))
  11. {
  12. if(!empty($_SESSION[$token_new]))
  13. {
  14. $_SESSION[$token_old] = $_SESSION[$token_new];
  15. }
  16. }
  17.  
  18. $_SESSION[$token_new] = Create_Code();
  19. $result = $_SESSION[$token_new];
  20. }
  21.  
  22. return $result;
  23. }
  24.  

la parte de verificación sería:

Código
  1. function Validate_Token($name, $value)
  2. {
  3. $result = false;
  4.  
  5. if(is_string($name) && is_string($value))
  6. {
  7. $token_old = 'token_old_'.($name);
  8.  
  9. if(isset($_SESSION[$token_old]))
  10. {
  11. if(!empty($_SESSION[$token_old]) && $_SESSION[$token_old] === $value)
  12. {
  13. $result = true;
  14. }
  15. }
  16. }
  17.  
  18.    return $result;
  19. }
  20.  

En un formulario...

[Creo el token con el nombre del formulario]
[El valor del token lo mando a input de tipo hidden]
[Lo recibo  por $_POST y lo valido por el nombre del token creado anteriormente]

¿Como puedo aplicar esto a por ejemplo una pagina que reciba $_GET?
En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Re: [Pregunta]: Token CSRF
« Respuesta #4 en: 4 Diciembre 2019, 05:17 am »

Con el código que mandas no puedo ver como generas el token.
Lo que veo es que tu token es:
token_upload.php  ?

Si es así es inutil. El token debe ser impredecible. Si es así como lo tienes, si alguien visita mi página web y tiene session abierta en la tuya, les borro las cuentas de tu sitio automáticamente. Solo tengo que mirar como se llama la acción de borrar cuenta y agregar al form token_delete.php

 Puedes usar la session directamente, o aplicarle un hash al form y a la session para comparar.

Yo personalmente uso criptografía simétrica. Genero un string random a partir de un CSPRNG, se lo aplico a datos del usuario como id, trozo de session cookie y fecha. Y se lo pongo en el form de CADA página generada. Cuando hace submit compruebo que todo esté correcto. Por algún tema tuyo se comentó una función CSPRNG segura de PHP 7+. Yo uso todo algoritmos propios.

Si usas algún framework te suelen traer funciones para ello. Si no te quieres complicar usa hmac y le pasas sha512 la página a la que haces action/submit  y la session. Con 3 o 4 líneas de código lo tienes listo.

Yo te recomiendo no hacer este tipo de acciones nunca con GET. Hay muchos ataques csrf que solo funcionan por GET, se te pueden escapar los tokens en la url con el referer si no lo haces correctamente, etc.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
token contra CSRF
Nivel Web
nØFi# 5 7,210 Último mensaje 13 Noviembre 2009, 10:28 am
por deibix
csrf token
Hacking
fokin 2 3,324 Último mensaje 21 Noviembre 2013, 17:27 pm
por fokin
[Pregunta]: ¿Seguridad del token de los captchas de google?
Desarrollo Web
Leguim 2 2,532 Último mensaje 24 Septiembre 2019, 11:02 am
por EdePC
[Pregunta]: Anti-CSRF 2.0 (Dilema)
Desarrollo Web
Leguim 4 3,381 Último mensaje 4 Diciembre 2019, 15:47 pm
por Leguim
[Aporte] Validacion de token de forma Criptografica, evitar ataques CSRF
Desarrollo Web
AlbertoBSD 8 5,257 Último mensaje 14 Diciembre 2019, 03:05 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines