当前位置: 首页 > news >正文

第三十七天(js前端数据加密和混淆)

前端技术JS实现:

1、非加密数据大致流程:

客户端发送->明文数据传输-服务端接受数据->处理数据

2、加密数据大致流程:

明文加密->客户端发送->密文数据传输-服务端接受数据->解密数据->处理数据

疑问:

安全测试中对数据进行修改提交会在上述哪一步操作中?

不加密: 铭文数据传输时修改数据

加密: 明文加密 , 在这操作时对数据进行修改,修改后让它加密,这才能使得它进入正常逻辑

#前端加密 Crypto库

项目:https://github.com/brix/crypto-js

参考:https://juejin.cn/post/7382893339181613068

使用Crypto库进行MD5/SHA1/HMAC/AES/DES等加密

base64 加密:

MD5 加密:

SHA1 加密 :

HMAC 加密:

AES 加密:

DES 加密:

#前端加密 jsencrypt库

项目:https://github.com/travist/jsencrypt

参考:偏前端 + rsa加解密 + jsencrypt.min.js--(新增超长字符分段加解密) - 睿舞霓裳 - 博客园

使用jsencrypt库进行RSA等加密

 RSA 加密:

先去生成一个公钥和私钥 ,上面的是公钥,下面的是私钥

测试:用之前写的一个ajax 提交数据的html文件,在里面将pass值进行加密;通过网页信息获取其加密方式,

login.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>后台登录</title>
  <style>
    body {
      background-color: #f1f1f1;
    }
    .login {
      width: 400px;
      margin: 100px auto;
      background-color: #fff;
      border-radius: 5px;
      box-shadow: 0 0 10px rgba(0,0,0,0.3);
      padding: 30px;
    }
    .login h2 {
      text-align: center;
      font-size: 2em;
      margin-bottom: 30px;
    }
    .login label {
      display: block;
      margin-bottom: 20px;
      font-size: 1.2em;
    }
    .login input[type="text"], .login input[type="password"] {
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
      border-radius: 5px;
      font-size: 1.2em;
      margin-bottom: 20px;
    }
    .login input[type="submit"] {
      background-color: #2ecc71;
      color: #fff;
      border: none;
      padding: 10px 20px;
      border-radius: 5px;
      font-size: 1.2em;
      cursor: pointer;
    }
    .login input[type="submit"]:hover {
      background-color: #27ae60;
    }
  </style>
</head>
<body>
<div class="login">
  <h2>后台登录</h2>
  <label for="username">用户名:</label>
  <input type="text" name="username" id="username" class="user" >
  <label for="password">密码:</label>
  <input type="password" name="password" id="password" class="pass" >
  <button>登录</button>
</div>
<script src="jquery.js"></script>
<script src="crypto-js.js"></script>
 
<script>
 
 
  $("button").click(function (){
 
    var passstr=$('.pass').val();
    var aseKey = "aeskey"
    var aespassstr = CryptoJS.AES.encrypt(passstr, CryptoJS.enc.Utf8.parse(aseKey),  // 参数1=密钥, 参数2=加密内容
            {
              mode: CryptoJS.mode.ECB, // 为DES的工作方式
              padding: CryptoJS.pad.Pkcs7  // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符
            }
    ).toString();
 
    //console.log(aesstr);
    $.ajax({
      type: 'POST',
      url: 'login.php',
      data: {
        username:$('.user').val(),
        password:aespassstr
      },
      dataType: 'json',
      success: function (data) {
        console.log(data);
        if (data['infoCode']==1){
          alert('登录成功!');
        }else{
          alert('登录失败!');
        }
      }
 
    });
 
  });
</script>

login.php

<?php
 
$user=@$_POST['username'];
$pass=@$_POST['password'];
//真实情况需要在数据库获取
$success=array('msg'=>'ok');
if($user=='xiaodi' && $pass=='xiaodisec'){
    $success['infoCode']=1;
}else{
    $success['infoCode']=0;
}
echo json_encode($success);

输入账号密码后打开f12 ,然后点击登录,查看数据是提交到哪里,这里是提交到login.php

上面去,那么就在全局进行搜索这个文件

在源代码中搜索,找到了login.php ,然后看到password ,接收的是一个变量,那么就去跟踪这个变量

看到aes 应该是aes加密,然后找加密文件;这里应该是加密逻辑了

看到加密的js文件

将这个加密方法丢到控制台去测试一下,要先将空格和注释去掉

 CryptoJS.AES.encrypt(passstr, CryptoJS.enc.Utf8.parse(aseKey),  // 参数1=密钥, 参数2=加密内容
            {
              mode: CryptoJS.mode.ECB, // 为DES的工作方式
              padding: CryptoJS.pad.Pkcs7  // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符
            }
    ).toString();

放上控制台中测试,发现可以正常加密,再去和网址登录的加密对比一下

那就可以把他的加密文件,和加密方法复制一份出来,然后通过不断的替换它,让它可以正常进入逻辑

访问这个html ,看是否能加密成功 成功加密

#代码混淆

混淆代码的主要目的是保护源代码,防止未经授权的复制、篡改或逆向工程。通过对变量名、字符串和控制流的修改,混淆代码看似毫无逻辑,但本质功能未变。混淆技术常用于商业应用和恶意软件中。

-压缩、混淆、加密技术

去除js代码中的不必要的空格、换行等内容。使源码压缩为几行内容,降低代码可读性,提高网站的加载速度。使用变量替换、僵尸函数、字符串阵列化、控制流平坦化、调试保护等手段,使代码变得难以阅读和分析,达到最终保护的目的,不影响代码原有功能,是理想、实用的javascript保护方案。

JavaScript Obfuscator Tool

变量名变成了 一些abcd的东西,加大代码阅读难度

http://www.dtcms.com/a/335299.html

相关文章:

  • Fixture Caliper 工具
  • GRPO(Group Relative Policy Optimization)公式速览
  • Scala面试题及详细答案100道(11-20)-- 函数式编程基础
  • 嵌入式软件架构设计之九: 双机通信之通信方式
  • 排列与组合
  • 超详细yolov8/11-obb旋转框全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c++/python)详解
  • STM32标准库学习笔记
  • MM-Spatial和Spatial-MLLM论文解读
  • 【力扣-多数元素 JAVA/Python】
  • CD4+ T细胞激活区分抗PD-L1联合抗CTLA4疗法与单药抗PD-L1治疗的响应差异-空间最近邻分析
  • 民法学学习笔记(个人向) Part.5
  • 【最后203篇系列】032 OpenAI格式调用多模型实验
  • 39.离散化与哈希
  • 数据结构:二叉树的遍历 (Binary Tree Traversals)
  • 杂记 03
  • v-scale-scree: 根据屏幕尺寸缩放内容
  • 基于Python的电影评论数据分析系统 Python+Django+Vue.js
  • 防御保护12-14
  • tmux常用命令
  • Flamingo
  • KingbaseES主备读写分离集群安装教程
  • 字节数据流
  • 北汽新能源半年报:双品牌战略拉动销量增长,多元布局促进转化
  • PIDGen!DecodeProdKey函数分析之四个断点
  • 【大模型应用开发 3.RAG技术应用与Faiss向量数据库】
  • 【leetcode】12. 整数转罗马数字
  • 关于“双指针法“的总结
  • 【Python】Python爬虫学习路线
  • “openfeign“调用接口上传文件报错:Failed to deleted temporary file used for part [file]
  • c++11扩展(c++11并发库)