2011-08-14 14 views
11

Parece que actualmente no hay un método de JavaScript puro para acceder al portapapeles del sistema usando la mayoría de los navegadores modernos, Internet Explorer es una excepción. En numerosas otras preguntas sobre desbordamientos de pila (por ejemplo, Clipboard access using Javascript - sans Flash?), se explica que esta limitación es una medida de seguridad deliberada para proteger contra sitios web que leen contraseñas u otros datos confidenciales del portapapeles.¿Por qué escribir en el portapapeles en JS se considera un agujero de seguridad?

Aunque parece obvio que la lectura desde el portapapeles sería un gran riesgo para la seguridad, no es claro por qué escribir en el portapapeles habría. ¿En qué escenario, si hay alguno, están protegiendo los buscadores al negar a JS la capacidad de copiar datos en el portapapeles?

Respuesta

14

Escribir en el portapapeles es una forma de que los sitios web maliciosos (u otros códigos que se ejecutan dentro de los sitios, como los anuncios basados ​​en flash) engañen a los usuarios para que propaguen el malware. Esto sucedió hace unos años con anuncios basados ​​en flash que copiaban una URL de malware en el portapapeles, con la esperanza de que los usuarios pegasen cuando tenían la intención de pegar algo más, contaminando así cosas como publicaciones de Facebook, foros y correo electrónico. En lugar de un enlace a una foto del gato de la tía Tilly, pegaría un enlace a algún malware drive-by. Por lo general, estos fueron los "fraudes antivirus falsos que le han infectado con un virus, paguen $ 50 por el software de eliminación". Hice algunas investigaciones al respecto, ya que muchos de mis clientes de ClipMate se preguntaban por qué estas desagradables URL aparecían repentinamente en ClipMate. Mientras investigaba, fui atacado por anuncios basados ​​en flash en MSNBC y DIGG. El portapapeles se ha bloqueado posteriormente en Flash 10. Puede leer más sobre mi saga aquí: http://www.clipboardextender.com/defective-apps/clipboard-virus-not-exactly-but-still-dangerous

Espero que la restricción de JavaScript evite que sucedan cosas similares.

+2

Ahora * este * es un problema de seguridad real. Justo lo que estaba buscando. Gracias. – goodside

+0

Buena respuesta, gracias por esta información. –

+0

Pueden usar Flash, de la misma manera que Github. – danuker

6

¿Qué sucede si el usuario no desea sobrescribir su portapapeles?

+0

Exactamente. Por ejemplo, un usuario con KeePass puede tener una contraseña que necesita en su portapapeles, y sobrescribir los datos que quiere almacenar con los suyos sería destructivo y molesto, por lo que los navegadores no querrían este comportamiento. – mopsled

+2

Flash solo lo admite cuando se hace clic en algo.No veo el agujero de seguridad si se implementó en JavaScript de la misma manera. Ahorraría muchos problemas con esas soluciones Flash. – pimvdb

+2

Aceptaré esto si no aparece nada más convincente, pero esto parece una razón trivial para desactivar algo potencialmente útil. Perder el portapapeles es una molestia en el peor de los casos, ya que no hay expectativas de que sea un casillero de almacenamiento a largo plazo para datos importantes. Además, hay innumerables otras maneras de molestar a los usuarios con JS que son universalmente compatibles, como la creación de notificaciones emergentes. – goodside

3

Si el usuario espera que su portapapeles contenga una cosa, pero de forma encubierta ha sido reemplazada por otra cosa, incluso eso es un problema potencial de seguridad, no solo una molestia.

Aunque es un vector de ataque poco probable, no es irracional pensar que se podría imaginar algo que involucre ingeniería social: convencer al usuario de pegar información alterada secretamente en un campo de contraseña en un recurso de destino. Ese recurso estaría protegido por una contraseña conocida por el atacante.

0

Además de los problemas de vulnerabilidad mencionados anteriormente, hay al menos un escenario en el que la implementación impráctica de la API del portapapeles de JavaScript puede plantear algunos problemas de seguridad.

Hoy en día tenemos nuevas API para establecer conexión entre ventanas separadas sin invocar el lado del servidor, como postMessage, MessageChannel o, por ejemplo, BroadcastChannel recientemente introducido a Firefox. Estas API tienen diferentes niveles de compatibilidad con el navegador, pero todas ellas están considerando problemas de origen cruzado. Es decir, debería ser imposible recibir un mensaje de una ventana en un host diferente a menos que esta ventana realmente lo permita explícitamente.

Esto no se cumple con la API del portapapeles. Imagine que algún código en la página pega el código al portapapeles y este portapapeles es escaneado por alguna otra ventana. Este es un escenario muy extraño y altamente hipotético que depende de algunas suposiciones bastante extrañas y exóticas, pero vale la pena mencionarlo.

Cuestiones relacionadas