Entendiendo la misma política de origen

2

Estoy tratando de entender mejor la misma política de origen. Por lo que entiendo, la misma política de origen restringe el código de un "origen" y no accede a los datos de otro "origen". Lo que estoy tratando de entender es el contexto de este código. Puedo ver que el código en dos pestañas (example1.com y example2.com) no puede acceder a los datos en el DOM del otro. ¿Qué pasa con una página que carga código de ambos sitios? ¿Se mantiene la restricción / seguridad en ese caso? Este es un caso de uso muy válido ya que todos los sitios hoy en día tienen un código cargado de Twitter, Facebook, google + al menos además del código de example1.com. Entonces, ¿el código de Twitter puede acceder a las cookies establecidas por example1.com? ¿O se mantiene la misma política de origen incluso en este caso?

Por supuesto, en este caso, asumo que el código se carga desde Twitter, Facebook directamente y no se retransmite desde el servidor example1.com. También estoy adivinando que existe el peligro de XSS si example1.com está transmitiendo el código para Twitter, Facebook, etc. ¿Tengo razón?

Si tengo razón, ¿cómo separa el navegador los datos de dom para el código cargado de cada sitio cuando todos se cargan en la misma página? ¿Cómo hace un seguimiento de a qué datos se puede acceder mediante qué código?

    
pregunta user220201 24.06.2014 - 10:10
fuente

1 respuesta

6

Al salir de tu ejemplo de Twitter y Facebook, ambos de su ejército de scripts no están leyendo el DOM o interactuando con otros scripts. Si cualquiera de los dos intentara, digamos, obtener el valor de una variable o algo así, entonces estarían violando el SOP.

El origen de un script es donde se incluye. Por lo tanto, si incluyó los scripts de análisis de Google en su página, puede interactuar con el DOM, por eso puede cargar jQuery desde el CDN de Google y hacer que funcione.

Aquí hay un escenario. Imaginemos que tienes un servidor y quieres incluir un "¡Me gusta mi página!". Botón del servidor dos. Para que el botón del servidor dos funcione, necesita cargar código desde sus servidores. Por lo tanto, si incluye <script src="servertwo.js"></script> , está incluyendo un archivo real que puede cambiar su DOM porque su "origen" es su página. Su "origen" es su página, aunque el archivo está alojado en otro servidor porque su página es la que dice: "Quiero usar este archivo pero está ubicado en otro lugar".

Si el archivo JS del servidor dos intentara cargar un script adicional en su página, insertando algo como esto: <script src=anyserverexceptforyourown.js"></script> entonces estaría violando el SOP si ese script intentara cambiar el DOM. A pesar de que cargó el script original, el segundo script que JS intenta cargar el servidor dos no se originó en su página, como en la primera parte del ejemplo, por lo que su origen sería del servidor dos no su servidor.

En mi sitio web personal tengo varios scripts. Algunos de los scripts tienen este aspecto:

<script src="http://www.ericlagergren.com/javascript.js"></script>

otrossevenasí:

<scriptsrc="https://www.google-analytics.com/analytics.js"></script>

ambos "se originan" de mi sitio web porque yo hice referencia a ellos y les pedí que los incluyeran en mi página.

Si cualquiera de esos dos scripts intentó cargar un script adicional en mi página, ese tercer script estaría violando el SOP porque no pedí explícitamente que lo cargara mi página. ¿Tiene sentido?

    
respondido por el Eric Lagergren 24.06.2014 - 10:24
fuente

Lea otras preguntas en las etiquetas