Web开发-JS应用&原生代码&前端数据加密&CryptoJS库&代码混淆&Obfuscator库
使用变量替换、僵尸函数、字符串阵列化、控制流平坦化、调试保护等手段,使代码变得难以阅读和分析,达到最终保护的目的,不影响代码原有功能,是理想、实用的javascript保护方案。参考:https://www.cnblogs.com/Lrn14616/p/10154529.html。明文加密->客户端发送->密文数据传输-服务端接受数据->解密数据->处理数据。2、发现敏感信息(硬编码的帐号、pas
安全结合:
1、发现更多的有利用价值的信息(URL、域名、路径等等)
测试站、后台路径、未公开的路径、api地址等等
2、发现敏感信息(硬编码的帐号、pass、API密钥、注释等等)
硬编码帐号可登录、测试帐号可被登录、密钥泄露、注释中开发信息等等
3、发现危险的代码(eval、dangerouslySetInnerHTML等等)
URL跳转,XSS跨站、模版注入(SSTI)等
4、了解网站的逻辑校验功能
前端检测,加密逆向,数据走向等
学习文档:
原生JS教程
https://www.w3school.com.cn/js/index.asp
前端技术JS实现:
1、非加密数据大致流程:
客户端发送->明文数据传输-服务端接受数据->处理数据
2、加密数据大致流程:
明文加密->客户端发送->密文数据传输-服务端接受数据->解密数据->处理数据
疑问:
安全测试中对数据进行修改提交会在上述那一步操作中
前端加密 Crypto库
项目:https://github.com/brix/crypto-js
参考:https://juejin.cn/post/7382893339181613068
使用Crypto库进行MD5/SHA1/HMAC/AES/DES等加密
<script src="crypto-js.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
1、BASE64加密
<script src="crypto-js.js"></script>
<script>
var str="zhaoyang";
//base64编码
var base64str=window.btoa(str);
console.log(base64str);
</script>
2、MD5
//MD5编码
var md5str=CryptoJS.MD5(base64str).toString();
console.log(md5str);

3、SHA1加密
//SHA1加密
var shastr = CryptoJS.SHA1(str).toString();
console.log(shastr)

4、HMAC加密
//HMAC加密
var key = 'key';
var hash = CryptoJS.HmacSHA256(key, str);
var HMACstr = CryptoJS.enc.Hex.stringify(hash);
console.log(HMACstr)
5、AES加密
//使用AES加密
var aeskey = "aeskey" //定制密钥,长度必须为:8/16/32位,长度不一致也没问题
//加密 DES/AES切换只需要修改CryptoJS.AES <=> CryptoJS.DES
var aesstr = CryptoJS.AES.encrypt(str,CryptoJS.enc.Utf8.parse(aeskey),//参数1=密钥,参数2=加密内容
{
mode: CryptoJS.mode.ECB,//为AES的工作方式
padding: CryptoJS.pad.Pkcs7//当加密后密文长度达不到指定倍数(8、16字节)则填充对应字符
}
).toString();//toString=转字符串类型
console.log(aesstr);//在弹窗中打印字符串

6、DES加密

7、RSA加密
//公钥加密
var encrypt = new JSEncrypt();//实例化加密对象
encrypt.setPublicKey(PUBLIC_KEY);//设置公钥
var encrypted = encrypt.encrypt(str);//对指定数据进行加密
console.log(encrypted);
var PUBLIC_KEY=''
var PRIVATE_KEY=''
//私钥解密
var decrypt = new JSEncrypt(); // 创建解密对象
decrypt.setPrivateKey(PRIVATE_KEY); //设置私钥
var uncrypted = decrypt.decrypt(encrypted); //解密 'xiaodisec'
console.log(uncrypted);
var PUBLIC_KEY=
8、加密
这里就是给password进行加密


9、实战分析

这里看到了密码是被加密的,我们找下js

这里也很明显发现了调用了这个加密的库

这里就找到了加密密钥
尝试一下能否进行加密解密逆向
CryptoJS.AES.encrypt(i.ruleForm.password,CryptoJS.enc.Utf8.parse("SAXIqQnZ4CG2zi9d"),{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7}).toString();


前端加密 jsencrypt库
项目:https://github.com/travist/jsencrypt
参考:https://www.cnblogs.com/Lrn14616/p/10154529.html
使用jsencrypt库进行RSA等加密
<script src="jsencrypt.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.3.2/jsencrypt.js"></script>
代码混淆
混淆代码的主要目的是保护源代码,防止未经授权的复制、篡改或逆向工程。通过对变量名、字符串和控制流的修改,混淆代码看似毫无逻辑,但本质功能未变。混淆技术常用于商业应用和恶意软件中。
-压缩、混淆、加密技术
去除js代码中的不必要的空格、换行等内容。使源码压缩为几行内容,降低代码可读性,提高网站的加载速度。使用变量替换、僵尸函数、字符串阵列化、控制流平坦化、调试保护等手段,使代码变得难以阅读和分析,达到最终保护的目的,不影响代码原有功能,是理想、实用的javascript保护方案。
在线混淆:见打包PDF
https://obfuscator.io/
更多推荐



所有评论(0)