当前位置: 首页 > 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.lryc.cn/news/623116.html

相关文章:

  • 力扣 hot100 Day75
  • 在本地部署Qwen大语言模型全过程总结
  • v-scale-scree: 根据屏幕尺寸缩放内容
  • PowerPoint和WPS演示放映PPT时如何禁止鼠标翻页
  • Ubuntu 25.04 安装并使用 MySQL 8.4.5 的步骤
  • 国内代理IP在SEO行业中的应用
  • 中级统计师-会计学基础知识-第三章 会计凭证与会计账簿
  • Ubuntu 25.04更新了哪些内容揭秘
  • 利用 Java 爬虫按图搜索淘宝商品(拍立淘)实战指南
  • Obot MCP 网关:用于安全管理 MCP 服务器采用的开源平台
  • 创新词汇表设计:UniVoc - 中英文混合处理的新方案
  • 【AI论文】NextStep-1:迈向大规模连续令牌自回归图像生成
  • 实例分割-动手学计算机视觉13
  • redis的key过期删除策略和内存淘汰机制
  • leetcodehot100 矩阵置零
  • 基于Python3.10.6与jieba库的中文分词模型接口在Windows Server 2022上的实现与部署教程
  • Hugging Face 与 NLP
  • 从依赖到自研:一个客服系统NLP能力的跃迁之路
  • Day56 Java面向对象10 方法重写
  • 肖臻《区块链技术与应用》第20-22讲 - 以太坊难度调整、权益证明和智能合约
  • 超详细yolov8/11-obb旋转框全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c++/python)详解
  • vscode的使用
  • B3844 [GESP样题 二级] 画正方形
  • CPP运算符优先级
  • [go] 桥接模式
  • RecSys:多目标模型和MMOE
  • pwn定时器,ARM定时delay 外部中断用函数指针(统一)day55,56
  • 一周学会Matplotlib3 Python 数据可视化-绘制自相关图
  • mysql使用group by的时候想显示没有参与聚合的字段怎么办
  • 软考 系统架构设计师系列知识点之杂项集萃(125)