我想弄清楚任何和所有的方法來防止特定元素的CSS修改和DOM修改。我知道這可能不是完全可能的,或者一個有才華的開發人員可以解決這個問題,但是,我並不擔心人們可能會繞過它,我只是想阻止新手。特別是那些使用jQuery。一個例子是刪除原型對象的某些屬性等。JavaScript黑客
回答
但是爲什麼你需要/想要這個?如果你想「保護」你的代碼,你可以使用一些JavaScript minifier作爲Google Closure Compiler或YUI壓縮器。他們會重寫你的腳本,這將很難被人讀取。如今,藉助Firebug和Grease Monkey等工具,幾乎不可能做到您想做的事。
*「...防止CSS修改和DOM修改...」*不是代碼,它似乎。 – Hamish 2012-07-22 05:39:07
@Hamish:正如我所說,**如果他想「保護」。 CSS和DOM修改很容易用我說的工具來執行。 – davidbuzatto 2012-07-22 05:41:06
如果你正在尋找一個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。
不要使用CSS或JavaScript:對完全依靠服務器端檢查等
這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – 2015-05-13 00:26:06
@ KenY-N坦率地說,這確實回答了這個問題。任何客戶端預防都可以輕鬆繞過。所有重要的驗證都必須在服務器端完成。 – cpburnz 2015-05-13 01:03:49
你不能從你的JavaScript或您在網頁中對象搞亂阻止任何人。瀏覽器的設計方式,您的頁面中的代碼和對象不受保護。從bookmarklets到javascript在瀏覽器插件的控制檯中輸入的所有內容都可能與您的頁面,代碼和變量混淆。這是瀏覽器的體系結構。
你可以做的是讓事情變得更加困難,這樣一些事情就需要多一點工作。這裏有幾件事情你可以做:
- 混淆/壓縮/最小化你的代碼會做這樣的事情刪除註釋,刪除空格,刪除一些換行符,縮短變量名,等等......這並不妨礙任何人從修改事物,但確實使它更多的工作去理解和弄清楚。
- 將變量置於閉包中而不使用全局變量。這使得直接修改腳本外部的變量變得更加困難。
- 保留您的服務器上的所有重要數據和機密。使用ajax調用來請求服務器使用該數據或祕密執行操作,以使瀏覽器客戶端永遠不可用重要信息。
你不能讓任何人修改DOM。根本沒有保護措施。您的代碼可以檢查DOM,並在DOM以非標準方式混淆時拒絕操作。但是,當然,代碼將被修改以刪除該檢查。
我現在發現這是不正確的。這其實是可能的原因是你可以永久地影響javascript在任何特定實例中的運行方式。讓我給你一個簡單的例子。 如果我覆蓋document.write,並且不把函數存儲到其他任何地方,則無法輕鬆檢索它。現在你可以運行插件等。但是你不能寫一個客戶端的JavaScript,它可以在丟失後修復它。 解決這個問題的方法是,您必須熱加載JS文件並實時修改它,但是如果您的代碼被混淆,則需要專家級別的開發人員。 – 2014-10-15 08:05:09
@JonathanWagner - 你打算怎麼做 - 用所有沒有任何功能的對象替換所有對象的DOM修改函數?祝你有個實際的應用程序。如果我願意,我可以截取代碼,因爲它會通過代理下載到您的頁面,並在它進入頁面之前修改它,或者在您的代碼之前插入我自己的JS(捕獲所有這些函數)。客戶端JavaScript在任何可能的方式根本不安全。瀏覽器不是爲了解決這樣的問題而設計的。如果你想要一個安全的客戶端環境,你需要一個不同的工具。 – jfriend00 2014-10-15 08:13:37
@JonathanWagner - 實際上,我花了大約3分鐘時間,通過創建一個新的iframe並從新/新文檔中獲取'document.write()'的新副本。請參閱http://jsfiddle.net/jfriend00/L401bod5/以供實施。 – jfriend00 2014-10-15 08:21:01
這是可能的,但要求JS文件始終從您的服務器加載。使用觀察者可以鎖定CSS屬性,並使用on DOM刪除/添加偵聽器,您可以將其鎖定到父級。這足以阻止大多數修改。
實際上,你可以走了一步,對核心JavaScript函數使得它幾乎不可能修改DOM,而無需加載本地或通過代理JS文件。進一步的安全性可以通過進行額外的域檢查來確保JS文件從應該加載的地方加載。
您可以在Flash中創建所有內容。在Chrome中,如果flash元素具有焦點(甚至不確定其效果如何,但您可以在http://www.twist-cube.com或http://www.gotmilk.com處看到示例),則甚至會出現一個防止用戶打開控制檯的錯誤。即使用戶確實設法打開了一個控制檯(這並不困難......),但仍然可以改變元素的形狀。
- 1. 黑客/黑客頭
- 2. 黑客方式「window.show」的Javascript
- 3. Javascript遊戲黑客預防
- 4. 這是什麼JavaScript黑客?
- 5. Javascript技巧和黑客
- 6. Magento網站的Javascript「d0e3a6」黑客
- 7. IE瀏覽器黑客的JavaScript和iframe
- 8. 這是一個JavaScript黑客入侵嗎?
- 9. WordPress的黑客注入JavaScript/iframes
- 10. 做scriptaculous還有Javascript黑客漏洞嗎?
- 11. 黑客選擇在JavaScript多,flicke
- 12. 黑客DropDownList值
- 13. THREE.ExplodeModifier黑客
- 14. tablesorter jQuery黑客
- 15. 黑客SVG字體
- 16. 黑客圍繞IE
- 17. PHP可變黑客
- 18. 黑客Wordpress帳戶
- 19. 的iOS SLComposeViewController「黑客」
- 20. 黑客入侵ptx
- 21. IE9黑客@root少
- 22. SmartWatch黑客入侵
- 23. CI黑客路由
- 24. Android黑客預防
- 25. WordPress黑客攻擊
- 26. GPGPU是黑客嗎?
- 27. 黑客sql查詢
- 28. Facebook黑客杯子Subround 1B - 老虎機黑客
- 29. 黑客訓練模擬器
- 30. 即CSS的黑客明星
短混淆所有的代碼,並使用JavaScript加載的東西,也混淆,有沒有什麼可以做。看看像http://www.vitaminnews.co.kr/這樣的韓國新聞網站做什麼來阻止人們搗亂他們的東西(並且仍然有可能推翻他們的大部分「防禦措施」)。 .. – dda 2012-07-22 05:34:42
你想以某種方式禁止人們在瀏覽器中運行JS代碼?不是。你放置的任何檢查都可能很容易被刪除。 – sachleen 2012-07-22 05:34:45