0

0

如何在表单提交前正确加密密码并确保服务端接收到密文?

霞舞

霞舞

发布时间:2026-01-16 20:18:10

|

890人浏览过

|

来源于php中文网

原创

如何在表单提交前正确加密密码并确保服务端接收到密文?

如何在表单提交前正确加密密码并确保服务端接收到密文?`formdata` 对象仅是表单数据的**一次性快照**,修改它不会影响原始表单字段;要让服务端收到加密后的密码,必须直接修改 `` 元素的 `value` 属性。

前端对密码进行加密(如使用 JSEncrypt)时,一个常见误区是:通过 new FormData(form) 创建对象后调用 .set() 修改密码值,误以为这会改变实际提交的内容。这是不正确的——FormData 仅在初始化时从表单中读取当前字段值,后续对其的任何修改(如 set()、append()、delete())都只作用于该内存中的副本,完全不影响原

或其 元素的值
。因此浏览器仍按原始表单 DOM 状态序列化并提交数据,服务端自然收到明文密码。

✅ 正确做法是:在提交前直接修改密码输入框的 value

function usernamePasswordLogin(event) {
  event.preventDefault(); // 阻止默认提交,以便先加密

  const passwordInput = document.getElementById('password-field');
  const plainPassword = passwordInput.value;

  // 使用 JSEncrypt 加密(需提前加载库并设置 publicKey)
  const encrypt = new JSEncrypt();
  encrypt.setKey(publicKey);
  const encrypted = encrypt.encrypt(plainPassword);

  if (!encrypted) {
    alert('加密失败,请检查公钥或密码长度');
    return;
  }

  passwordInput.value = encrypted; // ✅ 关键:直接修改 input 的 value
  event.target.submit(); // 手动触发提交,此时 formData 将包含密文
}

⚠️ 重要安全提醒:

酷表ChatExcel
酷表ChatExcel

北大团队开发的通过聊天来操作Excel表格的AI工具

下载
  • 客户端加密 ≠ 安全替代 HTTPS:JSEncrypt 等前端加密无法防止中间人篡改、调试器拦截或重放攻击。若未启用 HTTPS,攻击者可轻易绕过加密逻辑,甚至替换公钥。
  • 推荐实践:始终使用 HTTPS 传输明文密码,并在服务端使用强哈希算法(如 Argon2、bcrypt 或 PBKDF2)进行不可逆哈希存储。前端加密仅适用于极特殊场景(如端到端加密系统),且需配合签名、防重放等完整协议。
  • 补充验证:可在提交前打印 document.querySelector('[name="password"]').value 确认其值已更新为密文,避免因 DOM 查询错误导致静默失败。

总结:FormData 是只读快照,不是响应式代理;修改表单提交内容的唯一可靠方式,是操作 DOM 元素本身。

相关专题

更多
append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

343

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1071

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

174

2025.09.12

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

269

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

209

2023.12.29

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

2983

2024.08.14

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

180

2023.11.24

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

402

2023.08.14

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

2

2026.01.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.3万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.2万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号