危險,不要隨意讓網站記住密碼自動登陸!

來源:互聯網
上載者:User

標籤:隱藏   text   check   cep   session   ==   creat   ogg   save   

為了方便使用者登入,幾乎所有的網站都實現了“記住密碼”、“自動登陸”這樣似乎人性化的功能。
我也很喜歡這個功能,因為我自己的腦子實在是討厭記東西。
為了安全起見,我的密碼都設定的很複雜,滿足“數字+特殊符號+英文字母大小寫”。
但密碼一複雜,我就總記不住,就想讓網站替我記住。
但殊不知,這背後隱藏著巨大的風險。
我先勸大家一聲:“危險,不要隨意讓網站記住密碼自動登陸!”
要瞭解事情的真相,請隨我來看一看如何利用cookie實現記住密碼自動登陸。

第一步、構建form表單
<form class="form-signin required-validate" action="${ctx}/login?callbackType=forward">    ${token}    <div class="form-group">        <div class="row">            <input class="form-control" type="text" autofocus name="username" value="${username}" placeholder="請輸入會員編號" />        </div>    </div>    <div class="blank10"></div>    <div class="form-group">        <div class="row">            <input class="form-control" type="password" name="password" value="${password}" placeholder="請輸入登陸密碼" />        </div>    </div>    <div class="form-group">        <div class="row">            <div class="checkbox">                <label> <input type="checkbox" value="1" <c:if test="${isSave == ‘true‘}">checked</c:if> name="isSave" /> 下次自動登入                </label>            </div>        </div>    </div>    <div class="form-group">        <div class="row">            <button class="btn btn-lg btn-primary btn-block" type="submit">登入</button>        </div>    </div></form>
第二步、登陸時利用cookie記住密碼
@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中取出登陸使用者名稱、密碼等關鍵資訊
@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);    }}

當我輸入了帳號、以及密碼後,勾選上“下次自動登陸”,那麼系統在驗證通過後,就會通過cookie記住我的使用者名稱和密碼,下次不用再輸入帳號和密碼,直接點擊登陸就進入系統。

到此為止,自動登陸的功能已經實現了。
那麼,現在可以說一些負責任的話了。

在瀏覽器的開發人員模式下,注意紅色框中的“type=’password’”,此時我們將type修改為text。

注意,注意,你是不是已經發現了,密碼不再是密碼了,成了明文了。
你,此刻是否心驚肉跳了?

對,XX(這文章會被和諧嗎,不至於吧,這早已經不是秘密了,是個程式員都知道)也這樣!

所以,作為一個不務正業的IT狗來說,我奉勸各位,“危險,不要隨意讓網站記住密碼自動登陸!”
假如你的電腦這會被我用,而你又選擇讓網站記住密碼,那對不起了,你再複雜的密碼也不過是一串明文而已!
當然了,放心了,我是不會去看你的密碼了。
不過瀏覽器會不會看你的密碼我就不敢保證了。
既然為了安全,設定了超長超複雜的密碼,那麼每次就手動輸一下嘛,不麻煩,安全得很!

不務正業的IT狗,喜歡讀書和寫作!

掃一掃下方二維碼即可關注 沉默王二 公眾號:

危險,不要隨意讓網站記住密碼自動登陸!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.