2011-08-22 13 views
5

Me gustaría que mi bookmarklet requiera que el usuario inicie sesión. Aquí está la idea ... Creé un iframe para que el usuario inicie sesión y muestre la información de a/c. Pero me gustaría obtener información del servidor, por ejemplo, me gustaría saber si el usuario ya ha agregado esta página a mi servidor o no. Entonces, quiero hacer una llamada ajax, pero debido a la misma política de origen, no puedo hacerlo con ajax. Entonces, ¿cómo puedo obtener información del iframe?¿Cómo hacer la autenticación en bookmarklet?

La historia es algo como esto:

web de usuario -> usuario hace clic en el bookmarklet -> si conectado -> mostrar un 'añadir a fav' botón -> usuario hace clic en el botón Añadir a favoritos está la url se envía al servidor, recarga el servidor.

web

de usuario -> usuario hace clic en el bookmarklet -> si no hay sesión -> mostrar un botón de inicio de sesión -> login éxito -> hacer el flujo que el anterior web

de usuario -> usuario hace clic en el bookmarklet -> si conectado -> comprobar si el sitio web ya está agregado en el servidor -> no hay botón fav

Como puede ver, solo el iframe almacena la información del usuario que ha iniciado sesión.

+1

La misma política de origen no tiene efecto en iframes iirc. Simplemente agregue un iframe al documento principal. Dentro de bookmarklets js-code, agregue todos los datos que desee de la página principal al iframe y luego podrá jugar con ellos de la manera que desee, incluido ajax en su propio dominio. – aero

Respuesta

1

Lo que está haciendo es impossilbe porque viola el origin inheritance rules. Piénsalo de esta manera. Si puede obtener información de otro sitio web en este fasion, entonces puede leer CSRF Tokens, o leer el correo de alguien desde su cuenta de Gmail.

Hablando de CSRF, la mayoría de los inicios de sesión son solo una publicación simple con un nombre de usuario/contraseña. Usted construye un simple <form> en su sitio web que es idéntico a la solicitud POST necesaria para iniciar sesión. Usando JavaScript puede llamar al .submit() en el formulario que redirigiría el navegador a su nueva sesión autenticada. De hecho, así es como POST based CSRF exploit works (aunque generalmente en un ataque CSRF asume que el navegador ya está autenticado).

Por supuesto, esto no funcionará para todas las aplicaciones, como OpenID o gmail. Esto se debe a que estos servicios a menudo incluyen valor aleatorio junto con la solicitud de inicio de sesión.

Cuestiones relacionadas