2011-12-17 68 views
13

例如,Facebook.com可以在我的瀏覽器上運行版本控制腳本,並查看我是否正在使用腳本運行更改後的HTML代碼?一個網站可以知道我是否正在運行一個userscript?

這可以通過腳本來完成,它可以讀取緩存中的HTML代碼並生成某種散列標籤並將其發送回服務器,並與發送給客戶端的代碼進行比較?

+0

Facebook不是靜態的HTML,因此,哈希無用,因此,impossibru。 – 2011-12-17 21:48:54

+1

您是否有理由相信Facebook正在檢測您的用戶?如果是這樣,爲什麼?你如何懷疑這一點? – 2011-12-17 22:21:26

+3

Facebook不關心你的用戶腳本,事實上 - 他們頻繁的界面變化本身可以幫助他們抵禦很多用戶腳本,特別是那些沒有被主動維護的用戶腳本。 – c69 2011-12-18 00:35:43

回答

21

是的,理論上,一個網站可以推斷在各種情況下腳本的存在。

這不是萬無一失的,對於網站可以忽略不計的「威脅」來說,這通常太麻煩了。 (話又說回來,一些網站管理員可以爲這樣的事情強迫偏執狂;))

一些方法,根據不同的腳本做什麼(排名不分先後):

  1. 賭博或拍賣網站可以監控「出價」點擊的時間(速度和規律)。

  2. 一個網站可以AJAX返回節點數,<script>節點,尋找臨時演員。

  3. 同樣,一個網站可以AJAX-支持頁面的任何或全部內容,並將其與預期值進行比較。

  4. 可以注意到額外的AJAX調用或不符合隱藏要求的AJAX調用(並允許看起來成功)。

  5. 如果腳本以正確(錯誤)的方式使用unsafeWindowa page can detect that and even hijack (slightly) elevated privileges

  6. 可以檢測到沒有鼠標懸停事件之前的「點擊」。我已經看到這在野外使用。

  7. A page's javascript can often detect script-generated clicks (etc.)與用戶生成的不同。 (謝謝,c69,提醒。)

但是,最終,它的優勢在於userscript writer。可以在用戶端檢測並阻止任何網頁所採取的對策。即使定製的,需要的插件或所需的硬件加密狗也可以被熟練和動機的用戶破壞。

+3

在Opera中,頁面現在可以檢測到虛假點擊(通過'.isTrusted'屬性),可能很快就會在其他瀏覽器中使用。 – c69 2011-12-18 00:33:18

+2

@ c69,它已經[在Firefox中可能有一段時間](http://help.dottoro.com/ljoljvsn.php),並且在IE9中的支持有限。 – 2011-12-18 00:53:30

+1

@MikeOrtiz,編號userscript本身位於頁面無法看到的單獨範圍內 - 即使在「@grant none」模式下也是如此。 ...如果userscript創建'

5

更新:截至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> 
+0

這仍然有效嗎? – Edge 2015-10-16 02:03:46

+1

@邊緣,不,這不再有效,請參閱更新的答案。 – 2016-01-13 02:25:19

相關問題