我想知道是否有辦法阻止我的瀏覽器遊戲網站上使用userscripts?在網站上禁用客戶端腳本(如Greasemonkey)?
許多人使用Greasemonkey比其他玩家有優勢,我想要一種方法來禁用這些腳本。
我發現這篇舊文章"How To Disable Greasemonkey On Your Web Site",但它是從2005年開始的,似乎並不奏效。
我想知道是否有辦法阻止我的瀏覽器遊戲網站上使用userscripts?在網站上禁用客戶端腳本(如Greasemonkey)?
許多人使用Greasemonkey比其他玩家有優勢,我想要一種方法來禁用這些腳本。
我發現這篇舊文章"How To Disable Greasemonkey On Your Web Site",但它是從2005年開始的,似乎並不奏效。
打擊聰明的scripter是艱難的。他們有優勢,因爲他們的腳本可以在服務器執行前觸摸頁面,並且可以阻止或替換任何內容。請參閱this answer to a very similar question。
您最聰明,最具成本效益的對策是制裁用戶誰是「遊戲」的遊戲。攻擊竊賊,而不是鎖定。
如果你堅持與用戶進行技術戰爭,你所做的任何事情都將阻止每個人,但你可以讓他們爲之工作。
這裏有一些事情可以做,使生活困難腳本編寫:
頻繁改變頁面的結構,尤其是元素的ID和CSS類名。如果可以的話,定期插入或移除元素,例如,<div>
並不總是第二個<table>
中的第3個元素。
每當您進行更改時,請監控您的日誌以查找性能或使用率突然下降的用戶 - 但無論多少小時或幾天,都需要他們調整腳本。
同樣,經常更改您的javascript文件名,並更改腳本可能使用的任何變量或函數的名稱。
編寫您的點擊和鍵盤事件處理程序僅適用於支持它的瀏覽器的trusted events。
您可以將關鍵文本(包括倒數計時器)放在具有不可預知名稱的圖像中。使腳本難以檢測關鍵事件。需要做OCR來大幅提升Greasemonkey編劇所需的技能水平。 (至少現在)
如果您將主要遊戲動作移動到閃光燈,它將變得難以描述。他們甚至可能需要對閃存進行逆向工程,並將其替換爲具有可編寫腳本的鉤子。切換到閃光燈會惹惱和趕走用戶(像我一樣),但。
見that answer更多,但同樣,最好的和最經濟有效的方法是將制裁違規的用戶(一個或多個)。但請確保您的服務條款明確禁止他們在做什麼。
除了布魯克亞當斯自己的answer,這裏有幾個方法可以找到一個可能的scripter。
注:所有客戶端的功能可以由編劇誰理解的代碼被規避。
注意:這些使用需要一些智慧和良好的規劃。如果做錯了事情,那麼客戶端的東西可能會導致用戶瀏覽器癱瘓或者拒絕服務器。或者,如果您使用的自動化過多,您最終可能會在自己的代碼更新後禁止至少一半的用戶羣。
這是我的一個腳本。它可以肯定仍然使用一些工作,但框架是存在的(儘管你可能需要包裝的一切在一個大的功能,使私有變量)
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);
};
關於額外的DOM元素,用戶可以添加,諸如Avira的瀏覽器插件等元素。我認爲網站管理員不會再使用它。 – Edge