2012-08-14 20 views
5

Estoy haciendo un bookmarklet para que un usuario pueda cruzar una publicación de dominio a mi servidor usando CORS desde cualquier página. El usuario debe autenticarse antes de publicar y se utilizan cookies. ¿Hay alguna forma de evitar que un sitio web malicioso inserte código JavaScript en su página web para hacer una publicación de dominio cruzado en mi servidor utilizando la credencial del usuario?¿Previene el CSRF mientras usa CORS?

+0

No. Tal vez podría considerar publicar en un 'iframe' bajo el control de su sitio web, y luego hacer que los usuarios' confirm() 'antes de publicar. O puede insertar un token CSRF único en el bookmarklet de cada usuario, y luego ... Espera, me estoy haciendo una idea ... – user2428118

Respuesta

1

En teoría, puede haber una solución para esto.

  1. Incruste un token CSRF único en el bookmarklet de cada usuario.
  2. Ajuste el código en el bookmarklet en una función anónima, para que la página no tenga acceso a él.
  3. Incruste a strong hash function en su bookmarklet. Esto debe colocarse completamente dentro del código del marcador de reserva, para garantizar que no se pueda alterar.
  4. En su XMLHttpRequest, que envíe:
    1. El mensaje
    2. El hash de:
      1. El mensaje
      2. Su CSRF token de
      3. Una sal único, largo
      4. un id de usuario
      5. Una marca de tiempo (solo para asegurarse de que el mensaje se haya enviado ahora y no en otro momento)
    3. La sal
    4. La marca de tiempo
    5. un id de usuario
  5. En el servidor, se valida:
    1. Que la marca de tiempo está dentro del margen de error permitido (lo cual es necesario porque el ordenador de un usuario el reloj puede estar apagado)
    2. Que el hash es correcto
  6. Si todo es correcto, puede publicar el mensaje.

hay un defecto con este concepto: si un sitio web altere cualquiera de las funciones utilizadas por el bookmarklet (como Array()), el sitio web malicioso puede seguir siendo capaz de interceptar, copiar y/o modificar el mensaje , identificador de usuario o CSRF.

Cuestiones relacionadas