Es CORS una forma segura de hacer cross-domain peticiones AJAX?

Después de leer acerca de CORS (Cross-Origin Resource Sharing), no entiendo cómo se mejora la seguridad. Cruz-AJAX de Dominio de la comunicación es permitido si el ORIGEN se envía el encabezado. Como un ejemplo, si yo envío

ORIGEN: http://example.com

El servidor comprueba si este dominio está en la lista blanca y, si lo es, encabezado:

Access-Control-Allow-Origin: [recibido aquí url]

es enviado de vuelta, junto con la respuesta (Este es el caso simple, también hay prefighted solicitudes, pero la pregunta es la misma).

Es este realmente seguro? Si alguien quiere recibir la información, fingiendo un ORIGEN encabezados parece realmente una tarea trivial. También la norma dice que la política es ejecutada en el navegador, el bloqueo de la respuesta si Access-Control-Allow-Origin no es correcto. Obviamente si alguien está tratando de conseguir esa información, él no va a utilizar un navegador estándar para bloquearla.

InformationsquelleAutor Gibarian2001 | 2011-01-31

6 Kommentare

  1. 47

    No se puede simular el Origen de encabezado con JavaScript en un navegador web. CORS está diseñado para evitar que.

    Fuera de un navegador web, no importa. No está diseñado para detener a la gente de la obtención de datos que está disponible para el público. No se puede exponer al público sin que los miembros del público consiguiendo.

    Está diseñado de tal manera que dada:

    • Alice, una persona que proporciona una API diseñada para ser accedido a través de Ajax
    • Bob, una persona con un navegador web
    • Charlie, un tercero la ejecución de su propio sitio web

    Si Bob visitas de Charlie sitio web, a continuación, Charlie no puede enviar JS de Bob navegador de manera que obtiene los datos de Alicia del sitio web y la envía a Charlie.

    La anterior situación se hace más importante si Bob tiene una cuenta de usuario en la de Alice sitio web que le permite hacer cosas como enviar comentarios, eliminar datos, o ver los datos que se no disponible para el público en general — ya que sin protección, Charlie JS podría decir de Bob navegador para hacer que detrás de Bob (y, a continuación, enviar los resultados a Charlie).

    Si quieres evitar que personas no autorizadas vean los datos, entonces usted necesita para proteger con contraseñas, de cliente SSL cert o algún otro medio de identidad basado en la autenticación/autorización.

    • Básicamente CORS o Cross-Origin Resource Sharing y la autorización son dos cosas separadas. Como sugiere la sigla es en realidad para PERMITIR el origen de la cruz de compartir. Si un cliente está REALMENTE permiten hacer esto es para la lógica de autorización para determinar.
  2. 145

    El propósito es evitar este –

    • Ir a la página web X
    • El autor de la página web X ha escrito un mal secuencia de comandos que se envían a su navegador
    • que la secuencia de comandos que se ejecutan en el navegador inicia sesión en su sitio web del banco y no hacen mal las cosas y dado que se está ejecutando como en el navegador se tiene permiso para hacerlo.

    Las ideas es que el sitio web del banco necesita alguna manera de decirle a su navegador si las secuencias de comandos en el sitio web de X debe ser de confianza para las páginas de acceso a su banco.

    • Su respuesta fue muy clara también, gracias. Yo coudn no upvote porque requiere de 15 reputación.
    • Hice esto por ti 🙂
    • Así, CORS no es la protección de la integridad de la aplicación en la web X es la protección de la integridad del BANCO que dice que la web de X se puede confiar para hacer las llamadas a la API para el BANCO?
    • No, CORS no protege nada, de hecho se «debilita» la seguridad mediante la definición de las excepciones a SOP. El Access-Control-Allow-Origin de encabezado especifica el origen de los especificados en el Origin encabezado) se permite el acceso a los recursos. Normalmente sólo las solicitudes con el mismo origen sería permitido hacerlo. La parte más importante aquí es: el permitir/negar es forzada por el NAVEGADOR, no en el servidor. Esto significa que el Access-Control-Allow-Origin protege tu navegador, no el recurso en el servidor o en el propio servidor.
    • Lo que impide que el autor de la página web de X para iniciar sesión en el banco a través de sus sitios de backend que luego se utiliza como un proxy? Es sólo una capa adicional que tendría que crear, pero completamente de eludir el CORS problema habría en el navegador supongo.. Así que esto parece un navegador única protección que parece bastante sentido para mí si usted puede ir a su alrededor de una manera muy simple..
    • en su escenario el sitio web malicioso X no habría una sesión válida para el sitio web de banca electrónica. Incluso si la víctima se registra en su banca (por ejemplo, en otra pestaña), el sitio malicioso X no tendrían acceso a esa sesión, debido a la política de cookies forzada por el navegador: el navegador nunca iba a enviar la cookie de la sesión de que el banco sitio web X.

  3. 57

    Sólo para agregar en @jcoder ‘s respuesta, el punto entero de la Origin encabezado no es el de proteger los recursos solicitados en un servidor. La tarea es hasta el propio servidor a través de otros medios, precisamente porque un atacante es de hecho capaz de suplantar este encabezado con las herramientas adecuadas.

    El punto de la Origin encabezado es para proteger al usuario.
    El escenario es el siguiente:

    • un atacante crea un sitio web malicioso M

    • un usuario Alice es engañado para conectar con M, que contiene un script que intenta realizar algunas acciones a través de CORS en un servidor B, que en realidad apoya CORS

    • B probablemente no tienen M en su Access-Control-Allow-Origin encabezado, la causa por qué le parece?

    • El punto esencial es que M no tiene ningún medio para suplantar o sustituir el Origin encabezado, debido a que las solicitudes se inició por Alice del navegador. Así, su navegador establecerá la (correcta) Origin a M, que no está en el Access-Control-Allow-Origin de B, por lo tanto, la solicitud fallará.

    Alice podría alterar el Origin encabezado de sí misma, pero, ¿por qué ella, ya que significaría que se está dañando?

    TL;DR: El Origin encabezado protege a los inocentes de usuario. No proteger los recursos en un servidor. Es puedan ser suplantados por un intruso en su propia máquina, pero no puede ser suplantada en una máquina que no está bajo su control.

    Servidores debería proteger sus recursos, como la coincidencia de Origin encabezado no significa un acceso autorizado. Sin embargo, un Origin encabezado NO coincide significa un acceso no autorizado.

    • Muy bonita respuesta. El mejor general en mi humilde opinión.
    • Por qué no era esta la respuesta? Este es claramente el mejor. El cuarto punto se mencionó en la respuesta a esto es lo que el cartel es realmente pidiendo.
    • mejor respuesta Daniel. Este es el punto entero de CORS: «El punto central es, que M no tiene ningún medio para suplantar o sobrescribir el Origen de encabezado, causa las solicitudes iniciadas por ALICE del navegador. Así, su navegador establecerá la (correcta) de Origen para M, que no está en el Access-Control-Allow-Origin de B, por lo tanto, la solicitud va a fallar».
  4. 15

    El propósito de origen de la misma política de no dejar que las personas accedan al contenido de la web en general; si alguien quiere hacerlo, que incluso no necesitan de un navegador. El punto es dejar de secuencias de comandos de cliente el acceso a contenido en otro dominio sin los derechos de acceso necesarios. Ver la entrada de Wikipedia para el Mismo Origen de la Política.

    • «El punto es dejar de secuencias de comandos de cliente el acceso a contenido en otro dominio» esto se solucionó con el Origen Mismo de la Política. No? Me refiero a mi sitio web le envía algunos JS y su navegador no permite que las llamadas ajax a otro dominio. ese es el origen mismo de la política. CORS está haciendo muy oposit – permite que mi ajax para acceder al otro dominio. Me estoy perdiendo de algo grande aquí 🙂
    • a @luigi7up: Sí, CORS hace el opposit. Esto permite que el dueño de un sitio web para conceder el acceso a sus servicios de más de un dominio de confianza.
  5. 5

    Después de leer acerca de CORS, no entiendo cómo se mejora la seguridad.

    CORS no mejorar la seguridad. CORS proporciona un mecanismo para que los servidores de decirle a los navegadores cómo se debe acceder a dominios externos, y trata de hacerlo de una manera que es consistente con el navegador de modelo de seguridad que existían antes de CORS (es decir, la Mismo Origen De La Política De).

    Pero el Origen Mismo de la Política y CORS tienen un alcance limitado. Específicamente, el CORS especificación sí mismo no tiene ningún mecanismo para rechazar solicitudes. Puede utilizar los encabezados de decirle al navegador, no a dejar una página de un dominio externo de leer una respuesta. Y, en el caso de solicitudes de comprobaciones, puede pedir que el navegador no enviar algunas solicitudes de un dominio externo. Pero CORS no especifica los medios para que el servidor rechazar (es decir, no ejecutar) una solicitud real.

    Vamos a tomar un ejemplo. Un usuario ha iniciado sesión en el sitio A a través de una cookie. El usuario cargue sitio malicioso M, que intenta enviar un formulario en el que se hace un POST a A. ¿Qué sucederá? Bueno, con o sin CORS, y con o sin M ser un dominio permitido, el navegador enviará la solicitud a A con la autorización del usuario de la cookie, y el servidor ejecutará el malicioso POST como si el usuario haya iniciado.

    Este ataque se llama Cross-Site Request Forgery, y CORS en sí no hace nada para mitigarlos. Es por eso que CSRF protecciones son tan importantes si usted permite que las solicitudes de modificación de datos en nombre de los usuarios.

    Ahora, el uso de la Origin encabezado puede ser una parte importante de su protección CSRF. De hecho, la comprobación de que es parte de la recomendación actual para multifacética de CSRF defensa. Pero que el uso de la Origin encabezado cae fuera de los CORS especificación.

    En suma, CORS es una útil especificación para la ampliación de las existentes Mismo Origen de la Política de seguridad modelo a otros dominios aceptados. No se le añade el de la seguridad, y los sitios necesitan el mismo tipo de mecanismos de defensa que hacían antes de CORS.

  6. 1

    Estoy tarde para responder, pero no creo que cualquier post aquí realmente proporciona el tratado de responder. La mayor conclusión debería ser que el navegador es el agente que está escribiendo el origin el valor del encabezado. Un mal guión no se puede escribir el origin el valor del encabezado. Cuando el servidor responde con un Access-Control-Allow-Origin encabezado, el navegador intenta asegurarse de que este encabezado contiene el origin valor enviado anteriormente. Si no, se desencadena un error y no devuelve el valor de la espalda a la solicitud de comandos. Las otras respuestas a esta pregunta presenta un buen escenario para cuando desea denegar una respuesta al mal guión.

    @daniel f también proporciona una buena respuesta a la pregunta

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea