CAPITULO 10 CROSS SITE REQUEST FORGERY
CSRF , digamos que es la capacidad para engañar a un usuario a que realice una accion sin su consentimiento, puede haber acciones de nivel bajo , cambiar idioma , cerrar la session etc... y mas serios como cambiar la contraseña , retirar fondos , cambio de direccion postal , compras etc........
Estos ataques suelen ser enviados a la victima mediante emails, redes sociales ,privados etc....
Para evitar este ataque y prevenir a los usuarios de falsas peticiones , vamos a generar un token de session generado en todas las peticiones.
A la practica pues....
1 mostrare un ejemplo vulnerable y despues veremos la implementacion del token
perfil.php
Código PHP:
Ver original<?php
if(isset($_SESSION['USUARIO'])) {
// contenido del perfil
echo 'Bienvenido "'.$_SESSION['USUARIO'].'"';
echo '<a href="logout.php">salir</a>';
}
else
{
echo 'no tienes suficientes permisos para ver esta pagina';
}
?>
logout.php (vulnerable)
Código PHP:
Ver original<?php
echo 'Has cerrado la session';
?>
ejemplo de ataque
Código PHP:
Ver original<html>
<body>
<p>una imagen muy chula amigo!!</p>
<img src="logout.php" style="display: none;">
</body>
</html>
directamente cerrariamos la session ya que la imagen envia una peticion al servidor para acceder a logout.php y en logout no hay ninguna validacion de que el usuario halla pedido cerrar session.
soluciones
perfil.php
Código PHP:
Ver original<?php
if(isset($_SESSION['USUARIO'])) {
// contenido del perfil
echo 'Bienvenido "'.$_SESSION['USUARIO'].'"';
echo '<a href="logout.php?token='.$_SESSION['TOKEN'].'">salir</a>';
}
else
{
echo 'no tienes suficientes permisos para ver esta pagina';
}
?>
logout.php
Código PHP:
Ver original<?php
if(isset($_SESSION['USUARIO']) and
isset($_SESSION['TOKEN']) and
isset($_GET['token']) and
$_GET['token'] == $_SESSION['TOKEN']) {
echo 'Has cerrado la session';
}
else
{
}
?>
Una vez implementado el token el ejemplo de ataque no tendria ningun resultado ya no se cerraria la session evitando asi CSRF.
Bueno eso es todo espero que sriva de inspiracion para crear buenas defensas CSRF.
Eso es todo sobre el capitulo 10 , si sabes otras maneras o mejorar lo expuesto o solo deseas mostrar tu opinion por favor exponlo.
Saludos nos vemos nuevamente con el capitulo 11.
1 - proteger directorios :link
http://www.forosdelweb.com/f18/segur...ml#post4410846
2 - mensajes de error : link
http://www.forosdelweb.com/f18/segur...ml#post4412140
3 - archivo de configuracion : link
http://www.forosdelweb.com/f18/segur...ml#post4412159
4 - permisos y roles : link
http://www.forosdelweb.com/f18/segur...ml#post4412275
5 - verificacion de archivos : link
http://www.forosdelweb.com/f18/segur...ml#post4412596
6 - configuracion de sessiones : link
http://www.forosdelweb.com/f18/segur...ml#post4416219
7 - session hijacking : link
http://www.forosdelweb.com/f18/segur...ml#post4419281
8 - hash de contraseñas : link
http://www.forosdelweb.com/f18/segur...ml#post4421471
9 - inyeccion sql : link
http://www.forosdelweb.com/f18/segur...ml#post4451398