JavaScript黑客攻击

时间:2012-07-22 05:29:52

标签: javascript dom

我试图弄清楚任何和所有方法来阻止CSS修改和特定元素的DOM修改。我知道这可能不是完全可能的,或者一个才华横溢的开发人员可以绕过它,但是,我并不那么担心人们可能会绕过它,我只是想阻止新手。特别是那些使用jQuery的人。一个例子是删除原型对象等的某些属性。

6 个答案:

答案 0 :(得分:1)

但为什么你需要/想要这个?如果您想“保护”您的代码,可以使用一些JavaScript缩小器作为Google Closure Compiler或YUI压缩器。他们会重写你的剧本,很难被人阅读。如今,使用像Firebug和Grease Monkey这样的工具几乎不可能做到你想要的。

答案 1 :(得分:1)

不要使用CSS或JavaScript:p完全依赖服务器端检查等。

答案 2 :(得分:1)

你不能阻止任何人弄乱你的javascript或页面中的对象。浏览器的设计方式,您的页面中的代码和对象根本不受保护。从书签到javascript的所有内容都可以在控制台上输入到浏览器插件,这可能会弄乱您的页面,代码和变量。这是浏览器的体系结构。

你能做的就是让事情变得更加艰难,以至于某些事情需要做更多的工作。以下是您可以做的几件事:

  1. 混淆/压缩/最小化你的代码会做一些事情,比如删除注释,删除空格,删除一些换行符,缩短变量名等等......这不会阻止任何人修改内容,但确实会使它更容易理解和弄清楚。
  2. 将变量放在闭包中而不是使用全局变量。这使得从脚本外部直接修改变量变得更加困难。
  3. 将所有重要数据和机密保留在您的服务器上。使用ajax调用要求服务器使用该数据或机密执行操作,以便重要信息在浏览器客户端中永远不可用。
  4. 您无法阻止任何人修改DOM。根本没有针对此的保护措施。如果DOM已经以非标准方式搞砸了,那么您的代码可以检查DOM并拒绝操作。但是,当然,代码也会被修改以删除该检查。

答案 3 :(得分:-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

答案 4 :(得分:-1)

这是可能的,但要求始终从服务器加载JS文件。使用观察者可以锁定CSS属性并使用on DOM删除/添加侦听器,您可以将其锁定到父级。这足以阻止大多数修改。

您实际上可以更进一步修改核心javascript函数,这使得在不在本地或通过代理加载JS文件的情况下几乎无法修改DOM。通过执行额外的域检查可以添加进一步的安全性,以确保从应该从其加载的位置加载JS文件。

答案 5 :(得分:-1)

您可以在Flash中创建所有内容。在Chrome中,如果flash元素具有焦点,甚至会出现阻止用户打开控制台的错误(不确定这是如何工作的,但您可以在http://www.twist-cube.comhttp://www.gotmilk.com查看示例)。即使用户确实设法打开控制台(这并不困难......),你仍然可以做的就是改变元素的形状。