一直有人问HTML加密混淆怎么做,其实这在业内是早已很多人研究过的课题。
假日期间整理一篇文章分享给大家。

我们先理下需求,加密的目的是什么?加密到什么级别?为此我们可以牺牲什么?
我们知道这个世界不存在绝对的安全,加密会被破解、混淆会被反混淆。
技术小白、开发者、黑客,是完全不同的级别,防范不同级别的人策略都不一样。
防范力度越大,投入代价也越大,比如聘请专业的安全公司。
除了投入,我们还需要考虑程序的执行性能和用户体验。
加密的代码在运行时必须解密,混淆后尤其是混淆HTML后,程序的执行性能会下降。
是否真的有必要做这类的源码保护,还需要谨慎取舍。

一般而言,前端的代码,负责的是用户体验,后端的代码,负责更安全的数据处理。
前端不要涉及泄漏太多涉密信息,那么加密的意义不是特别大。
我很少在前端代码里看到值得保护的内容,比如高深的算法,很多代码是没必要牺牲用户体验来保护的。
但有些前端代码涉及最终用户的数据安全,此时还是要努力做数据保护的。

接下来具体分析几种手段。

    1. 不要在前端放敏感数据
      这个听起来是废话,但真的很重要。
      有些开发者在手机端明文存用户的密码,这是非常危险的事情。
      即使是原生开发,一旦手机被root,也会造成数据泄漏。更何况HTML5开发。
      比较好的做法是手机端存token,而不是密码,这里有篇文章专门介绍这块,涉及做登录的开发者推荐仔细看看设计基于HTML5的APP登录功能及安全调用接口的方式(原理篇)

    2. js、css压缩
      压缩不是加密,也不是混淆。但压缩后的js文件,往往也具有混淆的功能。
      js、css压缩是很常见的技术,我们经常看到各种框架的文件名是xxx.min.js,xxx.min.css。
      使用合适的js、css压缩方案,可以减少文件体积、提高载入速度,最重要的是,它还能加快程序的执行性能。简直是有百利而无一害。
      压缩js比较常用的工具是yahoo的YUI混淆,在HBuilder里点菜单工具-插件安装,里面有YUI compress,可以压缩js和css。
      如果js、css比较大,发布前压缩下是比较推荐的做法。

    3. HTML、js、css混淆
      压缩虽然也能混淆,但不是以让别人看不懂为目的,混淆是真正以别人看不懂为目的。
      但是这样的混淆就不像压缩那么有百利而无一害了,它会降低程序执行性能。
      一些开发者不希望发行包解压后可以直接看到源码,那么此时可以使用混淆方案。
      网上搜索HTML混淆,资料和工具都非常多。
      原理都是类似的,js代码变成乱七八糟的字符串,然后用eval执行,HTML代码变乱七八糟字符串,用document.write或innerHTML执行,css也可以动态的在document.write里写<style>。
      这些工具有免费也有商业的,一般越商业的越难被反混淆。
      这个是免费的在线混淆工具 http://www.myobfuscate.com
      这个是比较知名的商业工具,http://www.jasob.com
      其实大家也可以根据原理自己写混淆算法。
      混淆也是一个有年头的成熟技术,比如Google在保护gmail的前端代码时,也是通过混淆来保护的。
      不管是压缩还是混淆,使用grunt来做发布是不错的方式,开发后一键调用grunt处理,非常便捷。

    4. 防止webkit remote debug,即防止浏览器控制台调试
      Android4.4及以上和iOS是支持webkit remote debug的,在HBuilder的教程里也有如何使用chrome调试Android应用,和使用safari调试iOS应用的教程。
      在HBuilder开发的App里,manifest.json里下的plus-distribute下有一个debug标签,标记为false后打包(可视化界面里也有配置),这样的包运行在手机上时webview会阻止浏览器的远程调试请求。
      如果你想调试,那么把debug改为true后再打包。
      当然有些Android rom不是很规范,并不能阻止调试,这属于rom的bug。
      另外注意只有打包才能防调试,真机运行是不能阻止调试的。

    5. 专业加密加固加壳服务
      由于Android的特殊性,针对apk出现了加固、加壳产业,这也是业内常见的apk保护方案。
      很多应用市场都提供加固服务,比如360手机助手的加固。
      还有一批专业公司如<a">爱加密,里面有免费的基础安全保障服务,也有收费的高级安全保障服务。
      这里还有一个防止apk解压的小技巧:http://www.52pojie.cn/thread-287242-1-1.html

    6. HBuilder的alpha版本提供的原生js混淆
      在HBuilder的alpha版(day build)里,官方提供了原生层面的js混淆。
      这种混淆的性能比纯前端混淆的性能要更好,反编译的难度也更大。但目前有个问题就是Android4以下的手机不能运行加密后的版本。所以还没有放到正式版HBuilder里。alpha版的HBuilder下载地址:
      百度云盘下载地址http://pan.baidu.com/s/1hs0O4eS
      360云盘下载地址https://yunpan.cn/cBufFkhXP8t4b 访问密码 a309
      具体使用方式是在打包界面,可以选择需要加密的js文件,然后打包即可。

关于HTML、js加密、混淆、源码保护、代码安全,防止解压直接看源码的更多相关文章

  1. ICSharpCode.SharpZipLib 压缩、解压文件 附源码

    http://www.icsharpcode.net/opensource/sharpziplib/ 有SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, GZip, ...

  2. ICSharpCode.SharpZipLi 压缩、解压文件 附源码

    http://www.icsharpcode.net/opensource/sharpziplib/ 有SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, GZip, ...

  3. node.js如何将远程的文件下载到本地、解压、读取

    其实要解决的问题,很简单,获取远程文件,然后解压到本地读取. 在vscode中通过node.js来实现是比较方便的,相比之前的zip.js,我觉得我还是比较喜欢node.js实现方式. test.js ...

  4. Java代码中的(解压7z加密版)

    maven:需要加上这个下载这两个包 <dependency> <groupId>net.sf.sevenzipjbinding</groupId> <art ...

  5. js 加密混淆

    没有找到合适的加密算法就用的以下方式 拿webpack打包一遍,再拿uglify压缩一遍,再拿eval加密一遍 1. webpack ./init.js ./webpack/bundle.js -p ...

  6. js 加密混淆工具

    访问路径:https://www.sojson.com/javascriptobfuscator.html

  7. 查源码分析 游标 写 需要 cursors 一切不看源码的代码引入都是定时炸弹的启动

    https://github.com/PyMySQL/PyMySQL/blob/master/pymysql/__init__.py 建立连接 def Connect(*args, **kwargs) ...

  8. APP加固技术历程及未来级别方案:虚机源码保护

    传统App加固技术,前后经历了四代技术变更,保护级别每一代都有所提升,但其固有的安全缺陷和兼容性问题始终未能得到解决.而下一代加固技术-虚机源码保护,适用代码类型更广泛,App保护级别更高,兼容性更强 ...

  9. jQuery源码研究——怎么看源码

    废话 这几天有想看源码的想法,于是就开始了源码的研究,经过几天的摸索发现看源码还是有点技巧在里面的,想着把这些东东写下来作为一个小总结. 在一个多月前我对Vue源码进行了一次研究,那时看源码的方式基本 ...

随机推荐

  1. TarjanLCA学习笔记

    1.前言 首先我们介绍的算法是LCA问题中的离线算法-Tarjan算法,该算法采用DFS+并查集,再看此算法之前首先你得知道并查集(尽管我相信你如果知道这个的话肯定是知道并查集的),Tarjan算法的 ...

  2. Sqli-labs less 8

    Less-8 经过简单的测试,我们发现 'or 1=1--+返回正常,那么我们就基本知道应该怎么使用了,参考less5.这里简单的进行一个示例: http://127.0.0.1/sqllib/Les ...

  3. Flask实战第67天:Flask+Celery实现邮件和短信异步发送

    之前在项目中我们发送邮件和 短信都是阻塞的,现在我们来利用Celery来优化它们 官方使用文档: http://flask.pocoo.org/docs/1.0/patterns/celery/ re ...

  4. 【BZOJ 2646】【NEERC 2011】flight

    http://www.lydsy.com/JudgeOnline/problem.php?id=2646 夏令营alpq654321讲课时说这道题很简单但并没有几个人提交,最近想复习一下线段树,脑袋一 ...

  5. 20162318 2016-2017-2《Java程序设计》课堂实践项目

    20162318 2016-2017-2<Java程序设计>课堂实践项目 String类的使用 在String类中有一种split的方法.它可以把字符串分割为好几个小的字符串. 实践内容: ...

  6. [转]java框架spring中的opensessioninview有什么作用

    在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时 session已关闭,所以就会出现异常. 比较典型的是在MV ...

  7. NHibernate官方文档中文版——批量插入(Batch inserts)

    A naive approach t7o inserting 100 000 rows in the database using NHibernate might look like this: 一 ...

  8. HDU 4634 Swipe Bo (2013多校4 1003 搜索)

    Swipe Bo Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  9. ScheduledExecutorService run方法要加入try catch

    原文:http://www.andyqian.com/2018/03/07/java/javaSmallDetail/ 前言 今天我们一起来做个简单有趣的实验.熟悉Java的童鞋,对Scheduled ...

  10. Visual Studio中 sln 和 suo 文件

    我们通过双击.sln加载出我们的工程,Visual Studio采用两种文件类型(.sln和.suo)来存储解决方案的设置,它们总称为解决方案文件. .sln文件 solution,即解决方案.它引用 ...