2012-12-07 78 views

回答

4

打擊聰明的scripter是艱難的。他們有優勢,因爲他們的腳本可以在服務器執行前觸摸頁面,並且可以阻止或替換任何內容。請參閱this answer to a very similar question

您最聰明,最具成本效益的對策是制裁用戶誰是「遊戲」的遊戲。攻擊竊賊,而不是鎖定。

如果你堅持與用戶進行技術戰爭,你所做的任何事情都將阻止每個人,但你可以讓他們爲之工作。
這裏有一些事情可以做,使生活困難腳本編寫:

  1. 頻繁改變頁面的結構,尤其是元素的ID和CSS類名。如果可以的話,定期插入或移除元素,例如,<div>並不總是第二個<table>中的第3個元素。

    每當您進行更改時,請監控您的日誌以查找性能或使用率突然下降的用戶 - 但無論多少小時或幾天,都需要他們調整腳本。

  2. 同樣,經常更改您的javascript文件名,並更改腳本可能使用的任何變量或函數的名稱。

  3. 編寫您的點擊和鍵盤事件處理程序僅適用於支持它的瀏覽器的trusted events

  4. 您可以將關鍵文本(包括倒數計時器)放在具有不可預知名稱的圖像中。使腳本難以檢測關鍵事件。需要做OCR來大幅提升Greasemonkey編劇所需的技能水平。 (至少現在)

  5. 如果您將主要遊戲動作移動到閃光燈,它將變得難以描述。他們甚至可能需要對閃存進行逆向工程,並將其替換爲具有可編寫腳本的鉤子。切換到閃光燈會惹惱和趕走用戶(像我一樣),但。

that answer更多,但同樣,最好的和最經濟有效的方法是將制裁違規的用戶(一個或多個)。但請確保您的服務條款明確禁止他們在做什麼。

0

除了布魯克亞當斯自己的answer,這裏有幾個方法可以找到一個可能的scripter。

  • 定時函數檢查DOM樹並搜索不是代碼創建的添加元素,或查找缺少的元素。
    • 主要發現腳本改變UI,但尚未閱讀/理解遊戲的js源代碼。
    • 客戶端。
    • 「缺少的元素」 - 搜索可能會從使用類似AdBlock Plus的人那裏獲得誤報。如果目標是排名出來,也不是真正的假陽性。
  • 檢查cookie內容並查找用戶添加內容的提示。
    • 如果腳本必須將信息從頁面/會話轉移到另一個,並且不知道其他方法,他可能會嘗試使用cookie。
  • 檢查URL中的查詢/哈希以查找未由代碼添加的內容。
    • 可以嘗試通過更改鏈接將信息傳輸到其他頁面。
    • 哈希內容(URL中的#)只能在客戶端訪問。
  • 檢查會話/ localStorage。
    • 客戶端。
  • 通過匿名服務禁止訪問,如anonym.to
    • 可循環使用,但會使人們更難以使用不需要的在線工具
  • 只有當參考文獻正確時才允許訪問遊戲頁面,否則重定向到登錄頁面。
    • 另一種限制從外部來源訪問遊戲頁面的方法。
    • 如果你想成爲一個痛苦,在重定向時要殺死活動會話。

注:所有客戶端的功能可以由編劇誰理解的代碼被規避。
注意:這些使用需要一些智慧和良好的規劃。如果做錯了事情,那麼客戶端的東西可能會導致用戶瀏覽器癱瘓或者拒絕服務器。或者,如果您使用的自動化過多,您最終可能會在自己的代碼更新後禁止至少一半的用戶羣。

+0

關於額外的DOM元素,用戶可以添加,諸如Avira的瀏覽器插件等元素。我認爲網站管理員不會再使用它。 – Edge

-1

這是我的一個腳本。它可以肯定仍然使用一些工作,但框架是存在的(儘管你可能需要包裝的一切在一個大的功能,使私有變量)

var secureElements,secureTags,secureTagLoop,secureLoop,var secureReporter = secureAnalyzationFunction = 0; 
 
function analyze(secureAnalyzation){ 
 
\t if(secureAnalyzation.indexOf("function ")!=-1){ 
 
\t \t secureAnalyzationFunction = secureAnalyzation.substring(secureAnalyzation.indexOf("function ")+9,secureAnalyzation.indexOf("()")); 
 
\t \t secureAnalyzationFunction = secureAnalyzationFunction+"=undefined;"; 
 
\t \t eval(secureAnalyzationFunction); 
 
\t } 
 
} 
 
function secure(){ 
 
\t var secureTags = ["script","link","meta","canvas"]; 
 
\t for(secureTagLoop=0;secureTagLoop!=secureTags.length;secureTagLoop++){ 
 
\t \t secureElements = document.getElementsByTagName(secureTags[secureTagLoop]); 
 
\t \t for(secureLoop=0;secureLoop!=secureElements.length;secureLoop++){ 
 
\t \t \t if(secureElements[secureLoop].outerHTML.indexOf("verified")==-1){ 
 
\t \t \t \t analyze(secureElements[secureLoop].outerHTML); 
 
\t \t \t \t secureElements[secureLoop].parentElement.removeChild(secureElements[secureLoop]); 
 
\t \t \t \t secureLoop--; 
 
\t \t \t \t secureReporter++; 
 
\t \t \t \t console.log("Deleted "+secureReporter+" foreign elements.") 
 
\t \t \t } 
 
\t \t } 
 
\t } 
 
} 
 
window.onload = function() { 
 
\t secure(); 
 
\t setInterval(secure,1500); 
 
};