¿Puede un website saber si estoy ejecutando un UserScript?

¿Puede, por ejemplo, Facebook.com ejecutar un script de control de versiones en mi browser y averiguar si estoy ejecutando un código HTML alterado con el uso de un script?

¿Podría hacerse con una secuencia de commands que pueda leer el código HTML en la memory caching y producir algún tipo de label hash que se envíe de vuelta al server y se compare con el código que se envió al cliente?

Sí, en teoría, un sitio puede deducir la presencia de scripts en diversas situaciones.

Esto no es infalible y generalmente es demasiado problema para la insignificante "amenaza" al sitio. (Por otra parte, algunos webmasters pueden ser obsesivos, paranoicos sobre tales cosas;;))

Algunos methods, según lo que haga el script (sin ningún order en particular):

  1. Los sitios de juegos o subastas pueden monitorear el time (velocidad y regularidad) de los clics de "puja".

  2. Un sitio puede AJAX-respaldar el recuento de, por ejemplo, nodos <script> , buscando extras.

  3. De forma similar, un sitio puede respaldar AJAX todo o parte del contenido de una página y compararlo con los valores esperados.

  4. Se pueden anotar llamadas extra AJAX o llamadas AJAX que no cumplen con los requisitos ocultos (y se les permite tener éxito).

  5. Si el script usa unsafeWindow de la manera correcta (incorrecta), una página puede detectar eso e incluso apropiarse (ligeramente) de privilegios elevados .

  6. Se pueden detectar "clics" que no fueron precedidos por events de mouseover. De hecho, he visto esto usado en la naturaleza.

  7. El javascript de una página a menudo puede detectar clics generados por scripts (etc.) como diferentes a los generados por el usuario. (Gracias, c69 , para el recordatorio).

En última instancia, la ventaja es para el escritor del usuario, sin embargo. Cualquier contramedida que tome una página web puede detectarse y frustrarse en el extremo del usuario. Incluso los usuarios habilitados y motivados pueden subvertir los plugins requeridos o personalizados, o los dongles de hardware necesarios.

Actualización : Los methods a continuación son totalmente ineficaces a partir de Greasemonkey 3.3 .



Ver (enlace muerto) Cómo detectar Greasemonkey .

Javascript para detectar si GM está instalado (pero no si un script se está ejecutando realmente en esa página):

Opción obsoleta 1:

 if (Components.interfaces.gmIGreasemonkeyService) { alert("I smell a monkey!"); } 

Opción obsoleta 2:

 <script type="text/javascript" src="resource://greasemonkey/addons4.js"></script> <script type="text/javascript"> if (typeof GM_addonsStartup !== "undefined") { alert("I smell a monkey!"); } </script>