html混淆压缩,JavaScript的压缩和混淆

article/2025/8/15 21:00:52

JavaScript的压缩和混淆

我们都知道JavaScript是一种在客户端浏览器中执行的解释型语言。浏览器以纯文本的形式下载JavaScript,然后在需要的时候执行JavaScript代码。

通过使用浏览器的查看源代码功能,用户总是能够阅读JavaScript的源代码,该功能会显示页面的完整HTML代码,包括任何JavaScript代码块。即使JavaScript源代码被放在一个外部文件中并通过script标签的src属性引用到页面中,它仍然可以被用户下载并阅读。对于任何查看页面的人来说,JavaScript代码永远是可见的。正因为这一点,不应该在JavaScript中编写私有的或敏感的逻辑。这种逻辑最好放在服务器端,那里更安全。

随着在基于Ajax的应用中越来越多地使用JavaScript,JavaScript源文件的大小也会成为一个问题。因为是解释型语言,所以JavaScript永远不会被编译成机器级的二进制码,而后者是一种更高效的可执行代码存储格式。大量的JavaScript文件会降低应用的速度,因为在执行这些JavaScript之前,浏览器必须先从服务器下载这些源代码。此外,如果代码中的注释很多的话,庞大的JavaScript代码只会变得更庞大。

我们可以看出,JavaScript缺少二进制可执行代码的特性有两个问题:糟糕的安全性以及需要下载大量源代码。有什么办法可以解决这两个问题吗?

随着JavaScript变得越来越流行,已经有了一些工具可以帮助我们解决这两个问题。最简单的压缩工具只是去掉JavaScript源代码中的所有注释和换行符,这就可以减少需要下载的源代码量。删除注释和换行符可以减少30%或更多的JavaScript源代码量,这要视情况而定。需要注意的是,在被这种工具压缩之前,JavaScript源代码必须使用分号正确地结束所有的声明,不然就会产生错误或非预期的行为。

记住,虽然JavaScript语句总是应该以分号结束,但大多数浏览器还是很宽容的,它们允许不写这种分号,只要在本应是分号的地方有一个换行符。很多压缩器都会除去换行符,当声明没有使用分号结束时,这就会对JavaScript源文件产生非预期的结果。JavaScript并没有一个编译器来捕捉这种问题,因此,应该代之以使用JavaScript验证器来保证所有行都以分号结束,所有声明块都使用了大括号。一个很不错的JavaScript验证器是JSLint,可以从www.jslint.com下载它。总是在压缩JavaScript之前使用像JSLint这样的JavaScript验证器会帮助我们防止压缩及混淆非常规JavaScript所造成的错误。

另外一些工具更强大一些,它们提供混淆功能。混淆是一种扫描源代码的过程,这个过程会把字段和函数本来的名字修改为经过编码的、毫无意义的名字,以此来防止他人了解源代码的目的和内部结构。通常,像C++这样的语言是不需要混淆的,因为它会被编译成机器级的二进制指令。为了达到很高的安全性,即便是像Java或C#这样被编译成中间字节码而不是二进制指令的现代语言也需要使用混淆工具。

由于JavaScript解释型的本质,编写JavaScript混淆工具是极具挑战性的。在确定函数名的作用域和可见性、函数变量以及全局变量方面,JavaScript混淆工具可能是有困难的,结果是,压缩后的源代码往往不能正确运行。单凭经验来讲,最佳方法就是避免把敏感的或私密的逻辑暴露在JavaScript中,尽量把它们放在服务器端,它们在那里是安全的。如果你坚持要使用JavaScript混淆器,那么一定要彻底地测试混淆后的JavaScript,确保它仍然能够正常工作。

Dojo工具包的JavaScript压缩器

目前,广大开发人员普遍使用的JavaScript压缩器和混淆器是由Dojo工具包提供的,其下载网址是www.dojotoolkit.org/docs/compressor_system.html。与很多JavaScript压缩器一样,Dojo的压缩器也是通过除去注释和运算符两边的空格、用更短的名字替换变量名这样的手段来压缩JavaScript源文件的。稍等——替换函数名和变量名听起来很费解。我们不是刚刚说过由于混淆所带来的问题,应该尽量避免使用它吗?

Dojo压缩器与其同类工具的不同之处在于其压缩并混淆JavaScript源代码的方式。很多JavaScript混淆器使用正则表达式来除去空格和注释。正则表达式很容易失效,而且也不具备上下文信息,而上下文正是决定变量名作用域的关键。Dojo压缩器使用Mozilla基金会提供的JavaScript引擎Rhino。

Rhino使得Dojo压缩器具有了确定变量名上下文和作用域的能力。因为Rhino是一款实时JavaScript解释器,所以Dojo压缩器能够确定变量名的作用域并安全地缩短变量名,而不会造成任何问题。

Dojo压缩器的主要目的是维护公共API的兼容性,并确保压缩后的脚本功能与压缩前完全一致。即使Dojo压缩器缩短了变量名,那也是为了缩小文件,而不是为了混淆。Dojo压缩器的创建者们认为混淆JavaScript是没有意义的,但是缩小文件无疑非常有意义。为此,Dojo压缩器试图在缩小文件与可读性和可调试性之间达成良好的平衡。

使用Dojo压缩器

Dojo压缩器被打包成一个单独的JAR文件custom_rhino.jar,可以从Dojo网站上下载它。可以简单地通过命令行调用Dojo压缩器,只需指明将要被压缩的JavaScript文件的名字和目标文件的名字即可:

3827318_1.jpg

该命令中,uncompressed.js是将要被压缩的JavaScript文件的名字,compressed.js是目标文件的名字。

作为Java开发人员,你可能会使用Ant自动执行构建过程,并且可能不太希望每次执行构建的时候都要手动压缩JavaScript文件。幸运的是,Dojo压缩器也可以在一个Ant任务中使用,如代码清单2-2所示。

代码清单2-2  在Ant任务中使用的Dojo JavaScript压缩器

3827318_2.jpg

3827318_3.jpg

在Ant任务中使用该JavaScript压缩器时,一定要提供custom_rhino.jar的正确路径。此外,还要确保Rhino的.jar文件包含在Ant的classpath中。

那么Dojo压缩器会把JavaScript源文件的大小减小到什么程度呢?我们使用Dojo压缩器对一个领先的Ajax框架中一个JavaScript源文件进行了压缩。图2-7展示了压缩前(左)和压缩后(右)的文件大小。

3827318_4.jpg

图2-7  压缩前(左)和压缩后(右)的脚本大小


http://chatgpt.dhexx.cn/article/DedwpixB.shtml

相关文章

安卓混淆及反编译工具

目录 安卓混淆及反编译工具... 1 Eclipse编译混淆... 2 项目文件project.properties. 2 服务器编译混淆... 2 Android.mk. 2 混淆规则... 3 Java代码的混淆... 3 Proguard混淆规则汇总... 3 Native的混淆... 4 资源文件的混淆... 4 混淆的常见配置... 4 哪些不应该…

一款JavaScript 混淆(Obfuscator)工具(Tool)的研究(一)

1.研究使用的工具及网站 https://obfuscator.io 主要研究对象,主要是研究此网站的各种混淆方法及破解办法。 http://jsnice.org/ 用来格式化代码,方便调试。 notepad 编辑代码。 某浏览器 具有谷歌内…

stm32与sim900之GPRS通信(电脑串口与SIM900通信)

注意: 1 sim900在进行GPRS通信的时候最大电流可以到90MA.瞬间电流SIM900模块可能高达2A4V,即输入端电流瞬间值可能高达740mA12V,故给模块选择电源的时候,要能满足瞬间电流峰值。 以上这段话摘录自正点原子的SIM900用户手册,也就是说你在用SI…

GSM模块(SIM900)详解

GSM模块(SIM900) 0. GSM概述1. 常用的GSM模块2. SIM900系列3. STM32使用SIM900系列通信方法AT指令示例代码 0. GSM概述 GSM(全球系统移动通信)是一种数字移动通信技术,是世界上最常用的移动通信标准之一。它是由欧洲电…

常见的防火墙技术介绍

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt280 防火墙是一个系统或一组系统,它在内网与Internet间执行一定的安全策略。典型的防火墙应包含如下模块中的一个或多个:包过滤路由器、应用层网关(或代理服务器…

linux平台下防火墙iptables原理

转载自:http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646466.html linux平台下防火墙iptables原理(转) iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包…

简述防火墙

什么是防火墙? 在遭受入侵时,做内外网隔离的策略叫做防火墙。 防火墙分类 按物理特性划分:软件防火墙、硬件防火墙;按性能划分:百兆级防火墙、千兆级防火墙……按防火墙结构划分:单一主机防火墙、路由集…

【计算机基础】防火墙

工程师CCNAHCIA 资深工程师CCNPHCIP 技术专家CCIEHCIE IPS:入侵防御系统,发现攻击和入侵进行阻断IDS:入侵检测系统,检测有无攻击漏洞扫描:发现本地服务器/PC,存在哪些中高低危的风险,解决漏洞…

下一代防火墙概述

目录 1.防火墙概述 1.1定义 1.2防火墙分类 1.3防火墙功能 1.4防火墙的策略 2.防火墙发展史 2.1 包过滤防火墙:一个严格的规则表 2.2 应用代理防火墙:为每个应用添加代理 2.3 状态检测防火墙:建立会话表 2.4 入侵检测系统&#xff0…

上海交通大学考研复试模块小结——防火墙技术

既然上次开了这个系列,索性就把这个信息安全这一块的主流技术都介绍一遍好了。上篇博客讲了密码学,今天就来说说防火墙技术。 防火墙技术 防火墙技术是位于两个新人程度不同的网络之间的软件或者硬件设备的组合,实质上是一种控制隔离技术。…

防火墙入门实验

第一章 iptable的使用 一、实验原理 1.1 Iptables Iptables 是用来设置、维护和检查Linux内核的IP包过滤规则的。 可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。每个链都是一个规则列表,对对应的包进行匹配&#xf…

NAT和防火墙

网络地址翻译没文化的酒鬼 防火墙和NAT NAT路由器是安装了NAT软件的路由器,拥有至少一个全球通用的外部IP。 在计算机网络中,NAT最直接的作用是IP映射:将内网终端A的IP和端口号经过NAT映射后,转成公网服务器B的IP和新端口号&am…

快速了解防火墙

快速了解防火墙 防火墙是一种由计算机硬件和软件组成的系统,部署于网络边界,是连接内部网络和外部网络(或内部网络不同安全级别的部门)之间的桥梁,同时对进出网络边界的数据进行保护,防止恶意入侵、恶意代码的传播等,…

防火墙概述

AC是为了防御从内网到外网的攻击防火墙是为了防御从外网到内网的攻击 防火墙的定义 防火墙通常用于两个网络之间的隔离 主要用于保护一个网络区域免受来自另一个网络区域的网络攻击和网络入侵行为路由器与交换机的本质是转发,防火墙的本质是控制和防护 防火墙的工…

防火墙(firewall)

前言 计算机的安全性历来就是人们热衷的话题之一。而随着Internet的广泛应用,人们在扩展了获取和发布能力的同时也带来信息被污染和破坏的危险。这些安全问题主要是由网络的开放性、无边界性、自由性造成的,还包括以下一些因素。 1. 计算机操作系统本身…

华为防火墙的学习

防火墙 - 含义和定义 什么是防火墙? 防火墙的工作原理 防火墙的区域: 包过滤防火墙----访问控制列表技术---三层技术 代理防火墙----中间人技术---应用层 状态防火墙---会话追踪技术---三层、四层 UTM---深度包检查技术----应用层 下一代防火墙 防火墙的…

潘多拉 STM32L475 VE——开发板学习 (持续更新)

首先就是开发板的各个硬件的介绍: ◆ MCU : STM32L475VET6 , LQFP100 , SRAM : 128K , FLASH : 512K ◆ 外扩 SPI FLASH : W25Q128 , 16M 字节 ◆ 1 个电源指示灯…

WiFi 移植记录及心得 一

平台环境:IMX6-sabresd_6dq Android4.4.2 Linux3.0.35 WiFi模块:AP6181 (BCM43362) Linux3.0.35已经是支持博通的芯片,可以看到 kernel_imx/drivers/net/wireless 下面有几款博通芯片(bcm4329/bcm4330/bcmdhd)的驱动源码,AP6181WiFi模块用的bcm43362这款,所以这里选…

imx6ull linux下wifi驱动移植

linux下wifi移植,首先要保证硬件gpio相关配置正确,第二步是才是软件相关的配置 一、硬件篇 硬件模块选的是正基ap6745的三合一模块(wifi、bt、fm),wifi通讯用sdio模式传输数据,sdio_vsl决定sdio工作电压是…