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?
5
A
Respuesta
1
En teoría, puede haber una solución para esto.
- Incruste un token CSRF único en el bookmarklet de cada usuario.
- Ajuste el código en el bookmarklet en una función anónima, para que la página no tenga acceso a él.
- 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.
- En su XMLHttpRequest, que envíe:
- El mensaje
- El hash de:
- El mensaje
- Su CSRF token de
- Una sal único, largo
- un id de usuario
- Una marca de tiempo (solo para asegurarse de que el mensaje se haya enviado ahora y no en otro momento)
- La sal
- La marca de tiempo
- un id de usuario
- En el servidor, se valida:
- 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)
- Que el hash es correcto
- 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
- 1. crossdomain.xml previene el almacenamiento en caché
- 2. Cambiar una imagen mientras usa JCrop
- 3. ¿Insertar fila en DB mientras usa multiprocesos?
- 4. Obtenga códigos de error mientras usa psql
- 5. UIView parcialmente transparente mientras se usa el backgroundColor
- 6. cómo obtener el Id de la URL mientras usa node.js
- 7. ¿Es posible CSRF con métodos PUT o DELETE?
- 8. operador bash && previene el fondo sobre ssh
- 9. ¿Previene el reordenamiento en la salida derivada?
- 10. Previniendo CSRF?
- 11. CodeIgniter ajax CSRF problema
- 12. Agregar .cs en un ResourceDictionary?
- 13. Archivos "Designer1.cs" extraños creados
- 14. Vista de lista dentro de scrollviewer previene scrollviewer scroll
- 15. IIS busca el archivo .cs en el sitio compilado .net
- 16. mysql previene los números negativos
- 17. Django unique_together no previene duplicados
- 18. CSRF vulnerabilidad/cookies pregunta
- 19. ¿Dexguard previene grietas LVL simples?
- 20. ¿Cómo previene el phishing en la aplicación móvil?
- 21. Javascript previene la función anónima?
- 22. Django CSRF cuando el backend y el frontend están separados
- 23. CALayer no está dibujando su contenido mientras se usa CABasicAnimation
- 24. ¿Por qué se lanzaría OutOfMemoryException mientras se usa PLINQ Take()?
- 25. ¿Qué tan seguro es apache Commons-javaflow mientras usa jasperreports
- 26. Mantener la URL codificada mientras usa la clase de URI
- 27. Obtener el token CSRF en la prueba
- 28. no puede encontrar ReleaseCapture en opencv mientras usa python?
- 29. Ignorar una propiedad mientras se usa jquery $ .extend()?
- 30. ¿Cómo recarga su entorno mientras usa script/console?
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