La principal diferencia entre XSS y CSRF es la perspectiva:
- XSS: aprovecha la confianza que el usuario tiene en un sitio web en particular
- CSRF: aprovecha la confianza que el sitio web tiene para el navegador del usuario
XSS tiene una dependencia con JavaScript sí, pero no está limitado a ese alcance. Lo que quiero decir es que necesita javascript para la carga útil, pero se sabe que las cargas útiles se ejecutan no solo por JS, sino también por ActiveX, flash, VBScript y html, por nombrar algunos. Todo depende de lo que el sitio permitirá a los usuarios cambiar en el propio sitio. Por lo tanto, noscript es una excelente manera de detener la ejecución de scripts de nivel superior (piense <script>attackmeplease()</script>
) pero, dependiendo del sitio, alguien puede ser realmente inteligente al insertarlo en, por ejemplo, medios flash que el usuario puede ejecutar porque es un sitio para compartir videos (un Por ejemplo, pero se entiende la idea, la ingeniería social juega un papel importante.
CSRF no tiene tal dependencia de javascript y está diseñado para enviar una solicitud a otros sitios web sin el conocimiento de los usuarios. Es altamente dependiente de la capacidad de los navegadores para obtener y ejecutar el paquete de ataque. Otra diferencia es que puede venir en más formas, como etiquetas de imagen HTML, objetos de imagen javascript, documentos de Word, películas, correos electrónicos, etc. La solicitud en sí no puede ser bloqueada si el paquete se ejecuta, pero el sitio puede validar la solicitud.
Algunas otras diferencias son los requisitos para la creación de instancias, en una, el usuario debe visitar un sitio específico, en la otra debe usar un medio contaminado que puede provenir de una variedad de fuentes, no solo de un sitio. El último punto de falla también es diferente, en XSS el usuario es el último punto de falla, mientras que en CSRF el servidor es.
Otra gran diferencia es que un sitio que es vulnerable a XSS es casi seguro que es vulnerable a CSRF, mientras que estar protegido de XSS incluso por completo no significa que esté protegido de CSRF.