2012-07-22 60 views
-1

我想弄清楚任何和所有的方法來防止特定元素的CSS修改和DOM修改。我知道這可能不是完全可能的,或者一個有才華的開發人員可以解決這個問題,但是,我並不擔心人們可能會繞過它,我只是想阻止新手。特別是那些使用jQuery。一個例子是刪除原型對象的某些屬性等。JavaScript黑客

+0

短混淆所有的代碼,並使用JavaScript加載的東西,也混淆,有沒有什麼可以做。看看像http://www.vitaminnews.co.kr/這樣的韓國新聞網站做什麼來阻止人們搗亂他們的東西(並且仍然有可能推翻他們的大部分「防禦措施」)。 .. – dda 2012-07-22 05:34:42

+1

你想以某種方式禁止人們在瀏覽器中運行JS代碼?不是。你放置的任何檢查都可能很容易被刪除。 – sachleen 2012-07-22 05:34:45

回答

1

但是爲什麼你需要/想要這個?如果你想「保護」你的代碼,你可以使用一些JavaScript minifier作爲Google Closure Compiler或YUI壓縮器。他們會重寫你的腳本,這將很難被人讀取。如今,藉助Firebug和Grease Monkey等工具,幾乎不可能做到您想做的事。

+0

*「...防止CSS修改和DOM修改...」*不是代碼,它似乎。 – Hamish 2012-07-22 05:39:07

+0

@Hamish:正如我所說,**如果他想「保護」。 CSS和DOM修改很容易用我說的工具來執行。 – davidbuzatto 2012-07-22 05:41:06

-1

如果你正在尋找一個jQuery特定的解決方案,粗略的方法將涉及到更改jQuery($)函數並將其替換爲自定義代碼,只有在提供的選擇器不匹配所需的元素以確保。

 
(function(){ 
jQueryOrig = jQuery; 
window.jQuery = window.$ = function(){ 
    if (jQueryOrig("#secure").is(arguments[0])) { 
     throw new Error("Security breach"); 
    } else return jQueryOrig.apply(this, arguments); 
} 
}()); 

直接使用DOM操作過程中的人會不會受到影響。另外,如果您實際上在生產代碼中包含任意第三方代碼,則應該查看Caja(http://code.google.com/p/google-caja/),該代碼將用戶限制爲JavaScript功能的子集。關於Caja,有一個很好的解釋:http://due-diligence.typepad.com/blog/2008/04/web-20-investor.html

1

不要使用CSS或JavaScript:對完全依靠服務器端檢查等

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – 2015-05-13 00:26:06

+0

@ KenY-N坦率地說,這確實回答了這個問題。任何客戶端預防都可以輕鬆繞過。所有重要的驗證都必須在服務器端完成。 – cpburnz 2015-05-13 01:03:49

1

你不能從你的JavaScript或您在網頁中對象搞亂阻止任何人。瀏覽器的設計方式,您的頁面中的代碼和對象不受保護。從bookmarklets到javascript在瀏覽器插件的控制檯中輸入的所有內容都可能與您的頁面,代碼和變量混淆。這是瀏覽器的體系結構。

你可以做的是讓事情變得更加困難,這樣一些事情就需要多一點工作。這裏有幾件事情你可以做:

  1. 混淆/壓縮/最小化你的代碼會做這樣的事情刪除註釋,刪除空格,刪除一些換行符,縮短變量名,等等......這並不妨礙任何人從修改事物,但確實使它更多的工作去理解和弄清楚。
  2. 將變量置於閉包中而不使用全局變量。這使得直接修改腳本外部的變量變得更加困難。
  3. 保留您的服務器上的所有重要數據和機密。使用ajax調用來請求服務器使用該數據或祕密執行操作,以使瀏覽器客戶端永遠不可用重要信息。

你不能讓任何人修改DOM。根本沒有保護措施。您的代碼可以檢查DOM,並在DOM以非標準方式混淆時拒絕操作。但是,當然,代碼將被修改以刪除該檢查。

+0

我現在發現這是不正確的。這其實是可能的原因是你可以永久地影響javascript在任何特定實例中的運行方式。讓我給你一個簡單的例子。 如果我覆蓋document.write,並且不把函數存儲到其他任何地方,則無法輕鬆檢索它。現在你可以運行插件等。但是你不能寫一個客戶端的JavaScript,它可以在丟失後修復它。 解決這個問題的方法是,您必須熱加載JS文件並實時修改它,但是如果您的代碼被混淆,則需要專家級別的開發人員。 – 2014-10-15 08:05:09

+0

@JonathanWagner - 你打算怎麼做 - 用所有沒有任何功能的對象替換所有對象的DOM修改函數?祝你有個實際的應用程序。如果我願意,我可以截取代碼,因爲它會通過代理下載到您的頁面,並在它進入頁面之前修改它,或者在您的代碼之前插入我自己的JS(捕獲所有這些函數)。客戶端JavaScript在任何可能的方式根本不安全。瀏覽器不是爲了解決這樣的問題而設計的。如果你想要一個安全的客戶端環境,你需要一個不同的工具。 – jfriend00 2014-10-15 08:13:37

+0

@JonathanWagner - 實際上,我花了大約3分鐘時間,通過創建一個新的iframe並從新/新文檔中獲取'document.write()'的新副本。請參閱http://jsfiddle.net/jfriend00/L401bod5/以供實施。 – jfriend00 2014-10-15 08:21:01

-1

這是可能的,但要求JS文件始終從您的服務器加載。使用觀察者可以鎖定CSS屬性,並使用on DOM刪除/添加偵聽器,您可以將其鎖定到父級。這足以阻止大多數修改。

實際上,你可以走了一步,對核心JavaScript函數使得它幾乎不可能修改DOM,而無需加載本地或通過代理JS文件。進一步的安全性可以通過進行額外的域檢查來確保JS文件從應該加載的地方加載。

-1

您可以在Flash中創建所有內容。在Chrome中,如果flash元素具有焦點(甚至不確定其效果如何,但您可以在http://www.twist-cube.comhttp://www.gotmilk.com處看到示例),則甚至會出現一個防止用戶打開控制檯的錯誤。即使用戶確實設法打開了一個控制檯(這並不困難......),但仍然可以改變元素的形狀。