La pregunta:
¿Cómo puedo, como víctima, proteger mi sitio para que no sea manipulado y no pueda hacer algo que se supone que no debe hacer, en un servidor compartido? La política del mismo origen mira hacia otro lado. Probablemente lo más conveniente sería si pudiera decir algo como "mi url = origen siempre único" .
Fondo:
He entrado recientemente en el mundo de Javascript y he aquí mi comprensión de Política del mismo origen : SOP entra en juego siempre que dos sitios en orígenes diferentes interactúan, ya sea a través de XMLHttpRequest
, <script>
loading, acceso DOM a través de window.open()
's Window
de referencia o mediante un iframe
..
Ahora está todo bien y bien en el caso de un "un sitio por dominio" o "en el sitio por subdominio" , pero ¿qué pasa con el alojamiento compartido o los dominios compartidos? ?
Escenario:
Deje que el sitio del chico bueno resida en
http://shared-hosting.tld/~target/administration/
y el atacante está en
http://shared-hosting.tld/~attacker/
Aparte de las cookies, la víctima tiene una sesión autenticada que de alguna manera está ocurriendo en /administration/
(cookies, almacenamiento local, lo que sea). Después de esto, el atacante engaña a la víctima para que visite el sitio en /~attacker/
y al usar window.open()
o iframe
en el sitio del atacante, navega por el navegador de la víctima hasta /administration/
. Ahora que el atacante tiene una referencia al objeto Window
y ambos sitios son del mismo origen, el atacante tiene acceso completo al contenido de ese sitio mediante la manipulación de DOM (autenticado y todo), porque el SOP no interfiere.
Y por favor no se enrede cómo el sitio /administration/
de la víctima autentica (y mantiene) el estado autenticado de los usuarios. A menos que haya una manera de solucionar este problema de esa manera.
También:
Entiendo que solo estoy apuntando al objeto Window
y al acceso a DOM a través de él, porque no veo (sé) otras formas en que un sitio podría interactuar maliciosamente con otros sitios en un host compartido en este caso , pero no dude en resaltar otras malas intenciones relevantes para esto.
Algunas reflexiones: ¿Javascript está comprobando la carga de páginas legítimas? No parece que ayude. ¿Encontrando el sitio "real" de la víctima dentro de un sitio "bienvenido" con un atributo de caja de arena? ¿No se permite el acceso de los padres y niños? .. Todo parece volver siempre al "padre" pudiendo acceder al "niño" sin ninguna restricción.