博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
危急,不要任意让站点记住password自己主动登陆!
阅读量:6345 次
发布时间:2019-06-22

本文共 5124 字,大约阅读时间需要 17 分钟。

为了方便用户登录,差点儿全部的站点都实现了“记住password”、“自己主动登陆”这样似乎人性化的功能。

我也非常喜欢这个功能,由于我自己的脑子实在是讨厌记东西。

为了安全起见。我的password都设置的非常复杂,满足“数字+特殊符号+英文字母大写和小写”。
但password一复杂,我就总记不住,就想让站点替我记住。
但殊不知。这背后隐藏着巨大的风险。
我先劝大家一声:“危急,不要任意让站点记住password自己主动登陆。”
要了解事情的真相,请随我来看一看怎样利用cookie实现记住password自己主动登陆。

第一步、构建form表单

第二步、登陆时利用cookie记住password

@RequestMapping("/login")public ModelAndView login(HttpServletResponse response,        @RequestParam(value = "username", required = false) String username,        @RequestParam(value = "password", required = false) String password) {    try {        boolean isSave = getParaToBoolean("isSave", false);        logger.debug("isSaved " + isSave);        // 尝试获取cookie        String cookieUser = CookieUtil.getCookieByName(request, Constants.COOKIE_USER);        logger.debug("cookie的值为:" + cookieUser);        // 验证用户信息        Members user = memberService.selectByUsername(username);        // 假设IP不同。则清除cookie        if (cookieUser != null) {            if (!user.getLastip().equals(request.getRemoteAddr())) {                // 移除自己主动登录cookie信息                CookieUtil.removeCookie(response, Constants.COOKIE_USER);// 删除cookie            }        }        MembersValidator.checkPassword(password, user.getPassword());        user.setLastip(request.getRemoteAddr());// 更新登录id 和最后登录时间        memberService.updateLastvisit(user);        checkToken();        int max_age = Variables.cookie_expire * 3600 * 24;        if (isSave) {            // 将自己主动登录信息存入cookie            CookieUtil.setCookie(response, Constants.COOKIE_USER,                    DesUtils.encrypt(username + "," + password + "," + isSave), max_age);        } else {            // 移除自己主动登录cookie信息            CookieUtil.removeCookie(response, Constants.COOKIE_USER);// 删除cookie        }        logger.debug("登陆成功后跳转");        return ajaxDoneSuccess(user.getUid().toString(), (String) getSessionAttr(Constants.BEFORE_LOGIN_URL));    } catch (Exception e) {        logger.error(e.getMessage());        logger.error(e.getMessage(), e);        return ajaxDoneError(Constants.SERVER_ERROR);    }}

这部分代码也非常清晰明了,就不做多的解释。

附上CookieUtil.java类

/** * Cookie工具类 *  */public class CookieUtil {
/** * 加入cookie * * @param response * @param name * @param value * @param maxAge */ public static void setCookie(HttpServletResponse response, String name, String value, int maxAge) { Cookie cookie = new Cookie(name, value); cookie.setPath("/"); if (maxAge > 0) { cookie.setMaxAge(maxAge); } response.addCookie(cookie); } /** * 删除cookie * * @param response * @param name */ public static void removeCookie(HttpServletResponse response, String name) { Cookie uid = new Cookie(name, null); uid.setPath("/"); uid.setMaxAge(0); response.addCookie(uid); } /** * 获取cookie值 * * @param request * @return */ public static String getCookieByName(HttpServletRequest request, String cookieName) { Cookie cookies[] = request.getCookies(); if (cookies == null) { return null; } for (Cookie cookie : cookies) { if (cookie.getName().equals(cookieName)) { return cookie.getValue(); } } return null; }}

第三步、从cookie中取出登陆用户名、password等关键信息

@RequestMapping("/initLogin")public ModelAndView initLogin() {    logger.debug("进入登陆页");    try {        ModelAndView initView = new ModelAndView("login");        String cookieUser = CookieUtil.getCookieByName(request, Constants.COOKIE_USER);        if (cookieUser != null) {            String decode = DesUtils.decrypt(cookieUser);            String[] cookieUsers = decode.split(",");            initView.addObject("username", cookieUsers[0]);            initView.addObject("password", cookieUsers[1]);            initView.addObject("isSave", cookieUsers[2]);        }        createToken();        return initView;    } catch (Exception e) {        logger.error(e.getMessage());        logger.error(e.getMessage(), e);        return error300(Constants.SERVER_ERROR);    }}

这里写图片描写叙述

当我输入了账号、以及password后。勾选上“下次自己主动登陆”。那么系统在验证通过后,就会通过cookie记住我的用户名和password,下次不用再输入账号和password。直接点击登陆就进入系统。

到此为止,自己主动登陆的功能已经实现了。

那么,如今能够说一些负责任的话了。

这里写图片描写叙述

在浏览器的开发人员模式下,注意红色框中的“type=’password’”,此时我们将type改动为text。

这里写图片描写叙述

注意,注意,你是不是已经发现了,password不再是password了。成了明文了。

你,此刻是否心惊肉跳了?

这里写图片描写叙述

对,XX(这文章会被和谐吗,不至于吧,这早已经不是秘密了。是个程序猿都知道)也这样!

所以。作为一个不务正业的IT狗来说,我奉劝各位,“危急。不要任意让站点记住password自己主动登陆!

假如你的电脑这会被我用。而你又选择让站点记住password。那对不起了,你再复杂的password也只是是一串明文而已!
当然了。放心了。我是不会去看你的password了。
只是浏览器会不会看你的password我就不敢保证了。
既然为了安全,设置了超长超复杂的password,那么每次就手动输一下嘛,不麻烦,安全得非常!

不务正业的IT狗,喜欢读书和写作!

微信扫一扫下方二维码就可以关注 沉默王二 公众号:

你可能感兴趣的文章
去掉iphone连接电脑时会出现的弹出窗口
查看>>
【python】-- web开发之HTML
查看>>
vs2015 去除 git 源代码 绑定
查看>>
解决firefox的button按钮文字不能垂直居中
查看>>
网络协议端口号详解
查看>>
大话数据结构读后感——第一章
查看>>
各种排序
查看>>
ts 格式化日期输出
查看>>
Optional
查看>>
sed 命令编辑文本
查看>>
LRUCache 具体解释
查看>>
Activity调用isDestroyed()方法报出,java.lang.NoSuchMethodError
查看>>
使用AFNetworking第三方下载类
查看>>
fhq-treap小结
查看>>
about porting
查看>>
MySQL事务及ACID特性
查看>>
Hadoop_31_MapReduce参数优化
查看>>
linux运维常见英文报错中文翻译(菜鸟必知)
查看>>
[原][osgEarth]添加自由飞行漫游器
查看>>
代码审查 Code Review
查看>>