讲师中心 微信公众号
AI工具推荐 视频效率加速

TP6.0 用户密码明文传输?前端 RSA 加密后端私钥解密保障安全

陌杰大大_5912

陌杰大大_5912

发布时间:2026-07-07 21:30:47

|

535人浏览过

|

来源于php中文网

原创

TP6.0必须通过前端RSA加密+后端私钥解密阻断密码明文传输:前端用JSEncrypt对password字段加密并传入公钥,后端用OPENSSL_PKCS1_OAEP_PADDING方式解密,再通过$request->merge()注入明文密码。

tp6.0 用户密码明文传输?前端 rsa 加密后端私钥解密保障安全

TP6.0 用户密码明文传输是典型高危漏洞,安全扫描工具会直接报“敏感字段未加密”,测试同学一测一个准;不加处理就上线,轻则被勒令整改,重则通不过等保测评。必须在提交前用前端RSA加密、后端私钥解密的方式切断明文路径。

生成2048位RSA密钥对并提取公钥

打开在线密钥生成工具(如 https://travistidwell.com/jsencrypt/ 或 http://web.chacuo.net/netrsakeypair),选择2048位长度,点击生成。

生成后,复制完整的 【-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY-----】 内容,注意首尾换行符也要保留,否则前端JSEncrypt初始化会失败。

把这段公钥字符串粘贴进TP6.0项目的 public/static/js/login.js 文件中,赋值给全局变量:const PUB_KEY = `-----BEGIN PUBLIC KEY-----\n...`;。

立即学习“前端免费学习笔记(深入)”;

前端使用 JSEncrypt 对密码字段加密

在 login.html 页面底部引入 JSEncrypt 库:<script src="/static/js/jsencrypt.min.js"></script>。

方法一:表单提交前拦截加密

给登录按钮绑定 click 事件,在 $.ajax() 发送前,对 password 字段单独加密:

const encrypt = new JSEncrypt(); encrypt.setPublicKey(PUB_KEY); const encryptedPwd = encrypt.encrypt($('#password').val()); data.password = encryptedPwd;

注意:不能对整个 data 对象调用 encrypt.encrypt() —— JSEncrypt 只接受字符串,传入 object 会返回 null,后端收不到密文。

前端设计优化skill
前端设计优化skill

前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。

下载

方法二:改用 FormData 提交(兼容文件类字段)

let formData = new FormData(); formData.append('username', $('#username').val()); formData.append('password', encrypt.encrypt($('#password').val())); $.ajax({ url: '/login', type: 'POST', data: formData, processData: false, contentType: false });

后端 TP6.0 中编写 RSA 解密中间件

第一步:在 app/middleware/ 目录下新建 RsaDecrypt.php

第二步:在中间件中读取 POST 参数 password 字段,判断是否为 Base64 编码格式(含 /+ 字符且长度通常 > 200)

第三步:调用自定义 RSA 工具类解密,将解密结果重新写入 Request 对象的 param 数据池

关键点:TP6.0 的 Request::param() 默认只读原始输入,必须用 $request->merge(['password' => $decrypted]) 才能让后续控制器拿到明文密码。

编写 PHP RSA 解密工具类

在 app/common/utils/ 下创建 RsaDecryptor.php,核心逻辑如下:

public static function decryptByPrivateKey(string $privateKey, string $encryptedData): string { $privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" . wordwrap($privateKey, 64, "\n", true) . "\n-----END RSA PRIVATE KEY-----"; $res = openssl_get_privatekey($privateKey); openssl_private_decrypt(base64_decode($encryptedData), $decrypted, $res, OPENSSL_PKCS1_OAEP_PADDING); openssl_free_key($res); return $decrypted; }

【必须使用 OPENSSL_PKCS1_OAEP_PADDING】 —— 若用默认 padding(即 no padding),前端 JSEncrypt 加密时会因数据块长度不匹配直接报错,后端也解不出任何内容。

第四步:在 config/middleware.php 中注册该中间件,作用于 login 接口路由。

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2563

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6570

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

5986

2024.03.19

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2563

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5563

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6570

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

6218

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

883

2024.05.22

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn