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

陌伟大大_9029

陌伟大大_9029

2026-01-16

950人浏览

原创

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

如何在表单提交前正确加密密码并确保服务端接收到密文?`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 将包含密文
}

⚠️ 重要安全提醒:

arcgis-js
arcgis-js

提供 ArcGIS Maps SDK for JavaScript 开发辅助,涵盖 2D/3D 地图视图、图层管理、数据可视化、空间分析等功能模块的参考和示例指导。

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

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

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
append用法
append用法

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

2023.10.25

618

4

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

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

2023.11.14

1496

8

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

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

2025.09.12

2844

8

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

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

2023.11.13

3291

4

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

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

2023.12.29

1005

3

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

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

2024.08.14

6541

7

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

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

2023.11.24

894

4

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

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

2023.08.14

6536

4

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.08.16

5510

6

热门下载

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

精品课程

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

共101课时 | 21.3万人学习

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

共39课时 | 4.9万人学习