たとえば、Facebook.com は私のブラウザでバージョン管理スクリプトを実行し、スクリプトを使用して変更された HTML コードを実行しているかどうかを確認できますか?
これは、キャッシュ内の HTML コードを読み取って、サーバーに送り返され、クライアントに送信されたコードと比較されるある種のハッシュ タグを生成できるスクリプトで実行できますか?
たとえば、Facebook.com は私のブラウザでバージョン管理スクリプトを実行し、スクリプトを使用して変更された HTML コードを実行しているかどうかを確認できますか?
これは、キャッシュ内の HTML コードを読み取って、サーバーに送り返され、クライアントに送信されたコードと比較されるある種のハッシュ タグを生成できるスクリプトで実行できますか?
はい、理論的には、サイトはさまざまな状況でスクリプトの存在を推測できます。
これは絶対確実というわけではなく、通常、サイトへのごくわずかな「脅威」に対しては、あまりにも面倒なことです。(繰り返しになりますが、一部のウェブマスターは、そのようなことに対して強迫観念的である可能性があります。;))
スクリプトの動作に応じたいくつかのメソッド (順不同):
ゲーム サイトやオークション サイトでは、「入札」クリックのタイミング (速度と規則性) を監視できます。
<script>
サイトは、エクストラを探して、たとえばノードの数を AJAX バックすることができます。
同様に、サイトはページのコンテンツの一部またはすべてを AJAX バックし、それを期待値と比較できます。
追加の AJAX 呼び出し、または隠れた要件を満たさない AJAX 呼び出しを記録できます (成功したように見せることができます)。
スクリプトがunsafeWindow
正しい (間違った) 方法で使用されている場合、ページはそれを検出し、昇格された特権を (わずかに) ハイジャックすることさえできます。
マウスオーバー イベントが先行しなかった「クリック」を検出できます。私は実際にこれが野生で使用されているのを見てきました。
ページの JavaScript は、多くの場合、スクリプトによって生成されたクリック (など)を、ユーザーによって生成されたものとは異なるものとして検出できます。(リマインダーをありがとう、c69。)
ただし、最終的には、ユーザースクリプトの作成者にとって利点があります。Web ページが講じる対策はすべて、ユーザー側で検出され、阻止される可能性があります。カスタムの必要なプラグインや必要なハードウェア ドングルでさえ、熟練した意欲的なユーザーによって破壊される可能性があります。
更新: 以下のメソッドは、Greasemonkey 3.3の時点ではまったく効果がありません。
(リンク切れ) How-to Detect Greasemonkey を参照してください。
GM がインストールされているかどうかを検出する Javascript (ただし、そのページでスクリプトが実際に実行されているかどうかは検出されません):
廃止されたオプション 1:
if (Components.interfaces.gmIGreasemonkeyService) {
alert("I smell a monkey!");
}
廃止されたオプション 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>