security - uris - ¿Por qué las API del navegador restringen las solicitudes de varios dominios?




uris de redirección autorizados google (2)

XMLHttpRequest requieren que CORS funcione entre dominios. Del mismo modo para las fuentes web, texturas WebGL y algunas otras cosas. En general, todas las API nuevas parecen tener esta restricción.

¿Por qué?

Es tan fácil de eludir: todo lo que necesita es un simple proxy del lado del servidor. En otras palabras, el código del lado del servidor no tiene prohibido realizar solicitudes entre dominios; ¿Por qué es el código del lado del cliente? ¿Cómo da esto seguridad a alguien?

Y es tan inconsistente: no puedo XMLHttpRequest , pero puedo <script src> o <link rel> o <img src> o <iframe> . ¿Qué significa restringir XHR, etc. incluso lograr?


Considera este escenario ...

  1. Vas a mi sitio malicioso.
  2. Mi sitio hace un XHR a su sitio web bancario y solicita el formulario para transferencia bancaria.
  3. El XHR lee el token que evita los formularios CSRF y POST junto con el token de seguridad y transfiere una suma de dinero a mi cuenta.
  4. (I) Beneficio !!!

Sin la Política del mismo origen en existencia, aún podría POST ese formulario, pero no podría solicitar el token CSRF que evita los CSRF.

El código del lado del servidor no se ejecuta en la computadora del cliente.


El problema principal con XHR es que no solo pueden enviar una solicitud, sino que también puede leer la respuesta. Ya era posible enviar solicitudes casi arbitrarias. Pero leer sus respuestas no fue. Es por eso que el XHR original no permitió ninguna solicitud de origen cruzado.

Más tarde, cuando surgió la demanda de solicitudes de origen cruzado con XHR, el CORS se estableció para permitir solicitudes de origen cruzado en condiciones específicas. Una condición es que los métodos de solicitud particulares, los campos de encabezado de solicitud y las solicitudes que contendrían credenciales de usuario requieren una llamada solicitud de verificación previa con la que el cliente puede verificar si el servidor permitiría la solicitud. Con esto, el servidor tiene la capacidad de restringir el acceso solo a orígenes específicos, de lo contrario cualquier origen podría enviar solicitudes.





cors