paip.提升安全—网站登录密码明文传输的登录高危漏洞解决方案

paip.提升安全绝大多数网站的登录高危漏洞解决方案

 

 

今天,几乎所有的网站都有登录注册模块,登录就要输入用户名和登录密码,并且,用户名和登录密码都是明文传输的,这样就有可能在中途被别人拦截,尤其是在网吧等场合。

 

所以,很多安全要求较高的网站都不会明文传输密码,它们会使用https来确保传输过程的安全,https是用证书来实现的,证书来自于证书颁发机构,当然了,你也可以自己造一张证书,但这样别人访问你的网站的时候还是会遇到麻烦,因为你自己造的证书不在用户浏览器的信任范围之内,你还得在用户浏览器上安装你的证书,来让用户浏览器相信你的网站,很多用户并不知道如何操作,就算会操作,也能也不乐意干;另一种选择是你向权威证书颁发机构申请一张证书,但这样有一定的门槛,还需要付费,也不是我们乐意干的事。

 

所以使用JS来实现RSA加密是个很好的方法..我的网站是ASPNET.. 真正的难点在于用javascript实现一个和.netRSA兼容的算法

 

 

后台产生一对公钥私钥

传给WEB页面

登录/注册的时候,使用JS加密

后台解码.

 

 

  protected void Page_Load(object sender, EventArgse)

    {

       

 

 

        pwdEncode pe= new pwdEncode();

        string[] ret=pe.PublicKey();

        strPublicKeyExponent=ret[0];

        strPublicKeyModulus=ret[1];

      

    }

    protected string strPublicKeyExponent=“”;

    protected string strPublicKeyModulus=“”;

 

 

 

//两个加密文本框,加密后的密码保存在这里..如果是登录页面,只需要一个就可以了

                   <input name=”encrypted_pwd” type=”hidden” id=”encrypted_pwd” />

                          <input name=”encrypted_pwd2″ type=”hidden” id=”encrypted_pwd2″ />

 

//调用相关JS

                          <SCRIPT type=text/javascript src=”/index_files/Account.js”></SCRIPT>

           <script src=”/Scripts/jQuery.md5.js” type=”text/javascript” ></script>

                 <script src=”/Scripts/BigInt.js” type=”text/javascript”></script>

                    <script src=”/Scripts/RSA.js” type=”text/javascript”></script>

                          <script src=”/Scripts/Barrett.js” type=”text/javascript”></script>

         <script>

 

//从后台得到公钥

var strPublicKeyExponent=”<%= strPublicKeyExponent%>”;

var strPublicKeyModulus=”<%=strPublicKeyModulus%>”;

 

 

//加密函数

function cmdEncrypt() {

            setMaxDigits(129);

            var key = new RSAKeyPair(strPublicKeyExponent, “”, strPublicKeyModulus);

            var pwdMD5Twice = $(“#SignIn_Pword”).attr(“value”);

            var pwdRtn = encryptedString(key, pwdMD5Twice);

            $(“#encrypted_pwd”).attr(“value”, pwdRtn);

                    

       //注意:需要清空原密码框

                       $(“#SignIn_Pword”).attr(“value”,””);

                   

 

       

 

//登录按扭事件

function  login_click()

 cmdEncrypt() ;

 return true;

 

//登录按扭事件注册

$(‘#SignIn_SignInClt’).click=login_click;

$(‘#SignIn_SignInClt’).click(function(){

  login_click();

});

 

 

因为使用了加密方式,所以原来的校验需要去掉,使用新的校验方式

 

            loginCheckor lc= new loginCheckor();

            lc.check(Account, Request[“encrypted_pwd”]);

 

public bool check(string uname,string pwd)

 

    {

        if (uname==“”)

        {

            throw new SystemException(¨º?¡äº?¨?”);

        }

      //  if(uname==null|| uname.Equals(“”))

        if (pwd== null ||pwd.Equals(“”))

            throw new Exception(¨¹??¨¹a?”);

        //

        //TODO: ¨²ä?ä|¬¨ª¨®1¨¬¡¥ºy?

        //

        return true;

    }

 

 

 

如果是注册页面

 

  //ati L921 am

        

            pwdEncode pe= new pwdEncode();

            pe.checkEmpty(Request[“encrypted_pwd”], Request[“encrypted_pwd2”]);

            string pwd=pe.getPwd(Request[“encrypted_pwd”]);

            string Pword2=pe.getPwd(Request[“encrypted_pwd2”]);

            pe.check(pwd, Pword2);  //检测两个密码是否相同

            //不能直接检测参数,因为公钥加密后的两个参数不同,需要解密后进行比较

 

——-登录后台

     pwdEncode pe= new pwdEncode();

        

            Pword=pe.getPwd(Request[“encrypted_pwd”]);

 

 

//这里主要使用session来保存RSA加密器和私钥

//发送公

public string[] sendPublicKey()

    {

        RSACryptoServiceProvider rsa;

        if (HttpContext.Current.Session[“rsa”] != null)

            rsa= (RSACryptoServiceProvider)HttpContext.Current.Session[“rsa”];

        else

            rsa= new RSACryptoServiceProvider();

 

        //if (string.Compare(Request.RequestType, “get”, true) == 0)

        {

            //???ä?SessionD

            HttpContext.Current.Session[“private_key”] =rsa.ToXmlString(true);

            HttpContext.Current.Session[“rsa”] =rsa;

        }

        //ã???º¨ºÌ¡ÀÁa?ê?Á?À?¤¡éª¨´¨ª¡ì?

        pwdEncode pe= new pwdEncode();

        RSAParameters parameter=rsa.ExportParameters(true);

  string      strPublicKeyExponent=pe.BytesToHexString(parameter.Exponent);

  string strPublicKeyModulus=pe.BytesToHexString(parameter.Modulus);

  string[] r= new string[2];

  r[0] =strPublicKeyExponent;

  r[1] =strPublicKeyModulus;

 

  return r;

 

 

    }

 

//解密函数

private static string getDecodePwd(string pwd)

    {

        RSACryptoServiceProvider rsa;

 

        rsa= (RSACryptoServiceProvider)HttpContext.Current.Session[“rsa”];

        pwdEncode pe= new pwdEncode();

        //   RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

        string strPwdToDecrypt=pwd;

        rsa.FromXmlString((string)HttpContext.Current.Session[“private_key”]);

        byte[] result=rsa.Decrypt(pwdEncode.HexStringToBytes(strPwdToDecrypt), false);

        System.Text.ASCIIEncodingenc= new ASCIIEncoding();

        string strPwdMD5=enc.GetString(result);

        return strPwdMD5;

    }

 

 

RSA加密实现Web登录密码加密传输 – guogangj – 博客园

原文链接:https://www.cnblogs.com/attilax/archive/2012/09/21/15199801.html

原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/18226

(0)
上一篇 2023年5月28日
下一篇 2023年5月29日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

优速盾注册领取大礼包www.cdnb.net
/sitemap.xml