<legend id="h4sia"></legend><samp id="h4sia"></samp>
<sup id="h4sia"></sup>
<mark id="h4sia"><del id="h4sia"></del></mark>

<p id="h4sia"><td id="h4sia"></td></p><track id="h4sia"></track>

<delect id="h4sia"></delect>
  • <input id="h4sia"><address id="h4sia"></address>

    <menuitem id="h4sia"></menuitem>

    1. <blockquote id="h4sia"><rt id="h4sia"></rt></blockquote>
      <wbr id="h4sia">
    2. <meter id="h4sia"></meter>

      <th id="h4sia"><center id="h4sia"><delect id="h4sia"></delect></center></th>
    3. <dl id="h4sia"></dl>
    4. <rp id="h4sia"><option id="h4sia"></option></rp>

        Skip to end of metadata
        Go to start of metadata

        问题

        在应用表单登录的时候,我们填写用户名和密码,点击登录提交后,提交的信息是以明文向后台发送请求

        这样,很容易被非法的人通过此漏洞获得个人的账户和密码信息,给系统安全带来很大的风险。


        解决方案

        用户在登录表单中填写正常的账户名和密码,进行提交;

        在提交的动作插入加密码后的账户和密码,然后提交加密后的账户和密码到后台;

        后台接收到登录请求,对账户和密码进行解密,并以用户真正的账户和密码进行身份验证

        如可以优化,可以在后台生成临时的登录校验码,并入到加密的运算中,然后在后台获得提交的信息,加入保存的过校验码进行解析(校验码只能使用一次)

        解决方法

        前端(JIRA)

        修改/includes/loginform.jsp

        前端(Confluence)

        修改/login.vm

        修改示例

        控制提交按钮的行为,可在页面底引入js,通过js进行加密;

        
        


        后端

        后台对request获得的账户名和密码进行加密,并获得解密后的账户名和密码进行后续的验证。

        注意验证包含以下几种场景

        • 本地验证(jira本地目录的用户)
        • LDAP验证(交由LDAP进行验证)
        • Authorization 的认证方式

         可修改以下类中的方法:

        • com.atlassian.seraph.filter.LoginFilter#extractUserPasswordPair
        • com.atlassian.seraph.filter.HttpAuthFilter#extractUserPasswordPair

         

        LoginFilter


         protected UserPasswordPair extractUserPasswordPair(HttpServletRequest request)
        	{
                // check for parameters
                String username = request.getParameter(RequestParameterConstants.OS_USERNAME);
                String password = request.getParameter(RequestParameterConstants.OS_PASSWORD);
                String newusername = "解密后的用户名";
                String newpassword = "解密后的密码";
        
                boolean persistentLogin = "true".equals(request.getParameter(RequestParameterConstants.OS_COOKIE));
                return new UserPasswordPair(newusername, newpassword, persistentLogin);
        	}
        }


        HttpAuthFilter

        protected UserPasswordPair extractUserPasswordPair(HttpServletRequest request)
        {
               String auth = request.getHeader("Authorization");
           if (SecurityUtils.isBasicAuthorizationHeader(auth))
               {
                   SecurityUtils.UserPassCredentials creds = SecurityUtils.decodeBasicAuthorizationCredentials(auth);
                   if (!"".equals(creds.getUsername()))
                   {
                       String username = creds.getUsername();
                       String password = creds.getPassword();
        
                       String newusername = "解密后的用户名";
                       String newpassword = "解密后的密码";
        
                       return new UserPasswordPair(newusername,newpassword, false);
                   }
               }
           return null;
        }














        • No labels