首页 > 其他分享 >HTTP的系统登录页面,如何避免明文传输用户密码?

HTTP的系统登录页面,如何避免明文传输用户密码?

时间:2024-05-28 14:11:36浏览次数:20  
标签:加密 传输 明文 密码 key var HTTP password 页面

系统登录页面,作为开发人员,应该没有陌生的吧。就像下面这样子。

 

点击登录,调用/login 接口。来看下面截图中的 载荷(payload)数据,其中,密码 password 的值是明文。

 

如果你的站点使用的是HTTPS协议,配置了有效的SSL证书,那将很好。HTTPS通过SSL/TLS协议建立安全的加密通信通道,确保传输过程中的数据被加密。这样,用户在登录页面输入的密码将在传输过程中得到保护。

如果你的站点使用的是普通的HTTP协议,安全层面,就要考虑了。因为,HTTP会使用明文的形式将这个用户密码提交到服务端接口。

 

因此,前后端需要改造一下,使用密文来传输用户密码。

AI告诉我们:如果需要在客户端对密码进行加密,可以使用JavaScript等技术对密码进行加密处理,然后再将加密后的密码传输给服务器。这样即使在传输过程中,密码也是以加密形式传输的。但是要注意,客户端加密需要谨慎设计和实施,确保密码的加密过程安全可靠。

 

就像下面这样子。

 

如何实现?

我们的系统是基于ruoyi框架搭建的。

前端jquery引入CryptoJS库,利用DES加密算法对密码进行加密。

问题来了,加密key怎么办?

一种方案,是前端调用服务端接口获取动态加密key。这是常规的办法。

现在,我们使用另一种方案,不需要调用后端接口获取key的办法。

前端如何生成动态key,而且还能让后端接口能解密?

答案是:基于时间。再细节一些,基于当前时间戳。

你一定会存疑:用户浏览器和服务器时间不一定总是一致呀!

是的。因此,***,直接让你看代码。

 1 function login() {
 2     var username = $.common.trim($("input[name='username']").val());
 3     var password = $.common.trim($("input[name='password']").val());
 4     var validateCode = $("input[name='validateCode']").val();
 5     var rememberMe = $("input[name='rememberme']").is(':checked');
 6     var key = Math.floor(jQuery.now() / 30000).toString();
 7     $.ajax({
 8         type: "post",
 9         url: ctx + "login",
10         data: {
11             "username": username,
12             "password": encryptByDES(password, key),
13             "validateCode" : validateCode,
14             "rememberMe": rememberMe
15         },
16         success: function(r) {
17             if (r.code == 0) {
18                 location.href = ctx + 'index';
19             } else {
20                 ...
21             }
22         }
23     });
24 }
25 
26 function encryptByDES(message,key) {
27     var keyHex = CryptoJS.enc.Utf8.parse(key);
28     console.log("keyHex:"+keyHex)
29     var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
30         mode: CryptoJS.mode.ECB,
31         padding: CryptoJS.pad.Pkcs7
32     });
33     return encrypted.toString();
34 }
View Code

重点是第x行。明白后,我们再看后端对密文的处理。

    // *password 是前端传过来的密文
    long floor = (long) Math.floor(System.currentTimeMillis() / 30000);
    String passwordText = null; // *明文
    try {
        passwordText = DESUtils.decrypt(password, String.valueOf(floor));
    } catch (Exception e) {
        log.error("密码解密异常1:", e);
        try {
            passwordText = DESUtils.decrypt(password, String.valueOf(floor-1));
        } catch (Exception ex) {
            log.error("密码解密异常2:", e);
            return error("非法请求");
        }
    }
View Code

 

完事!

接着说用户登录密码的安全。

上面用的是DES这种简单的加密算法。其实,如果想更安全,可以使用非对称加密算法,如RSA。

<iframe frameborder="no" height="400" scrolling="no" src="//player.bilibili.com/player.html?isOutside=true&aid=112517152180992&bvid=BV1ZWT5enEke&cid=500001562692352&p=1" width="640"></iframe>

 

标签:加密,传输,明文,密码,key,var,HTTP,password,页面
From: https://www.cnblogs.com/buguge/p/18209470

相关文章

  • IP地址证如何实现HTTPS访问?(内网IP、公网IP)
    不能提供域名只能提供IP地址也可以通过部署特定的SSL证书来实现HTTPS访问,这一特定的SSL证书就是IP地址证书。市面上常见的SSL证书多为以域名申请的,以IP地址来申请的SSL证书相对较少见。下面是IP地址证书的申请方法和流程:1选择证书品牌选择能支持公网和内网IP申请SSL证......
  • 仿猫眼电影购票页面
    实现效果首先是最上面流程线的布局,用到了bootstrap,使用前先引入bootstrap<!--流程线--><divclass="container"id="app"> <divclass="order-progress-bar"> <divclass="stepfirstdone"> <spanclass="step-n......
  • 推荐丨网站https访问也能免费实现了
    2022年Verizon数据泄露调查报告指出,当年75%的社会工程攻击涉及网络钓鱼,仅2022年一年就有超过33万个账户被网络钓鱼,网络钓鱼占整体社会工程攻击的41%。但是也不能将所有责任归咎于运维人员,因为薄弱的安全意识建设及宣教是大部分漏洞利用的原因。在进行网络信息交互的......
  • 动态渲染之vue页面向组件间传值
    ==Vue页面文件==//vue文件引入组件importceliangjulifrom"@/components/Map/celiangjuli.vue";//使用组件key:celiangMethod(任意名)<celiangjuli:celiangMethod="celiangMethod"></celiangjuli>////定义初始化valueletceliangMethod=ref();//......
  • React后台管理(十二)-- 页面常用hook封装 --- useSearch搜索封装
    文章目录前言一、useSearch自定义hook封装1.核心代码(1)hook文件代码+详细注释(2)使用到的store说明(3)使用到的config文件代码(4)使用到的白名单pageWhite文件代码2.使用方式(1)layout布局组件->监听并记录路由(2)搜索按钮组件->记录列表搜索的动作类型:搜索|重置(3)分页组件->记......
  • 创建一个配置为信任所有HTTPS连接的RestTemplate实例,不验证服务器的SSL证书。这个示
    这个配置类使用背景:可参考博客:springboot使用restTemplate发送https请求忽略ssl证书https://jsonll.blog.csdn.net/article/details/129191580?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-1......
  • Django 接收用户请求并通过HTTP回应
    准备工作python版本:3.10(本人的)Django版本:3.2.12(LTS长期支持版)注意:不同Django所对应的python版本是有要求的,建议事先查找自己的python版本,Django建议下载LTS长期支持版的安装:python3 //查看版本(在window用python命令)sudopip3installdjango[版......
  • ios系统上h5页面播放audio标签声音有延迟问题处理
    原文链接https://www.cnblogs.com/yalong/p/18214816背景app内嵌了一个H5页面,页面有个需求是点击某些按钮就触发声音,于是就使用了audio标签,但是有个问题就是在ios上,点击声音会有短时间的延迟,然后才播放声音找了好几种方案总算解决了方案一click事件改为mouseup事件因为移动......
  • OpenQA.Selenium.WebDriverException The HTTP request to the remote WebDriver serv
    OpenQA.Selenium.WebDriverException:“TheHTTPrequesttotheremoteWebDriverserverforURLhttp://localhost:xxxx/sessiontimedoutafter60seconds.”1.在谷歌浏览器上加上中括号中的内容[--remote-debugging-port=9222]2.使用管理员模式打开谷歌浏览器3.重新生成......
  • Day3_beast实现http server
    一、绑定和监听连接在1CServer.h中声明acceptor,以及用于事件循环的上下文iocontext,和构造函数classCServer:publicstd::enable_shared_from_this<CServer>{public:CServer(boost::asio::io_context&ioc,unsignedshort&port); //构造函数voidStart(); /......