例如,Facebook.com可以在我的瀏覽器上運行版本控制腳本,並查看我是否正在使用腳本運行更改後的HTML代碼?一個網站可以知道我是否正在運行一個userscript?
這可以通過腳本來完成,它可以讀取緩存中的HTML代碼並生成某種散列標籤並將其發送回服務器,並與發送給客戶端的代碼進行比較?
例如,Facebook.com可以在我的瀏覽器上運行版本控制腳本,並查看我是否正在使用腳本運行更改後的HTML代碼?一個網站可以知道我是否正在運行一個userscript?
這可以通過腳本來完成,它可以讀取緩存中的HTML代碼並生成某種散列標籤並將其發送回服務器,並與發送給客戶端的代碼進行比較?
是的,理論上,一個網站可以推斷在各種情況下腳本的存在。
這不是萬無一失的,對於網站可以忽略不計的「威脅」來說,這通常太麻煩了。 (話又說回來,一些網站管理員可以爲這樣的事情強迫偏執狂;))
一些方法,根據不同的腳本做什麼(排名不分先後):
賭博或拍賣網站可以監控「出價」點擊的時間(速度和規律)。
一個網站可以AJAX返回節點數,<script>
節點,尋找臨時演員。
同樣,一個網站可以AJAX-支持頁面的任何或全部內容,並將其與預期值進行比較。
可以注意到額外的AJAX調用或不符合隱藏要求的AJAX調用(並允許看起來成功)。
如果腳本以正確(錯誤)的方式使用unsafeWindow
,a page can detect that and even hijack (slightly) elevated privileges。
可以檢測到沒有鼠標懸停事件之前的「點擊」。我已經看到這在野外使用。
A page's javascript can often detect script-generated clicks (etc.)與用戶生成的不同。 (謝謝,c69,提醒。)
但是,最終,它的優勢在於userscript writer。可以在用戶端檢測並阻止任何網頁所採取的對策。即使定製的,需要的插件或所需的硬件加密狗也可以被熟練和動機的用戶破壞。
在Opera中,頁面現在可以檢測到虛假點擊(通過'.isTrusted'屬性),可能很快就會在其他瀏覽器中使用。 – c69 2011-12-18 00:33:18
@ c69,它已經[在Firefox中可能有一段時間](http://help.dottoro.com/ljoljvsn.php),並且在IE9中的支持有限。 – 2011-12-18 00:53:30
@MikeOrtiz,編號userscript本身位於頁面無法看到的單獨範圍內 - 即使在「@grant none」模式下也是如此。 ...如果userscript創建'
更新:截至Greasemonkey 3.3,以下方法完全無效。
見(死鏈接)
How-to Detect Greasemonkey
。
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>
這仍然有效嗎? – Edge 2015-10-16 02:03:46
@邊緣,不,這不再有效,請參閱更新的答案。 – 2016-01-13 02:25:19
Facebook不是靜態的HTML,因此,哈希無用,因此,impossibru。 – 2011-12-17 21:48:54
您是否有理由相信Facebook正在檢測您的用戶?如果是這樣,爲什麼?你如何懷疑這一點? – 2011-12-17 22:21:26
Facebook不關心你的用戶腳本,事實上 - 他們頻繁的界面變化本身可以幫助他們抵禦很多用戶腳本,特別是那些沒有被主動維護的用戶腳本。 – c69 2011-12-18 00:35:43