2012-07-22 31 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处看到示例),则甚至会出现一个防止用户打开控制台的错误。即使用户确实设法打开了一个控制台(这并不困难......),但仍然可以改变元素的形状。