paip.提升安全---网站登录密码明文传输的登录高危漏洞解决方案
paip.提升安全---绝大多数网站的登录高危漏洞解决方案
作者Attilax , 1466519819@qq.com
WEB登录密码明文传输的严重性... 1
JS实现 RSA非对称加密算法... 1
加解密及传输流程... 1
后台产生一对公钥下发给WEB页... 2
WEB页JS调用公钥进行加密提交... 2
后台校验密码不能为空... 3
解密密码... 4
密码编码器pwdEncode大部分原码... 4
参考:6
WEB登录密码明文传输的严重性
今天,几乎所有的网站都有登录注册模块,登录就要输入用户名和登录密码,并且,用户名和登录密码都是明文传输的,这样就有可能在中途被别人拦截,尤其是在网吧等场合。
JS实现 RSA非对称加密算法
所以,很多安全要求较高的网站都不会明文传输密码,它们会使用https来确保传输过程的安全,https是用证书来实现的,证书来自于证书颁发机构,当然了,你也可以自己造一张证书,但这样别人访问你的网站的时候还是会遇到麻烦,因为你自己造的证书不在用户浏览器的信任范围之内,你还得在用户浏览器上安装你的证书,来让用户浏览器相信你的网站,很多用户并不知道如何操作,就算会操作,也能也不乐意干;另一种选择是你向权威证书颁发机构申请一张证书,但这样有一定的门槛,还需要付费,也不是我们乐意干的事。
所以使用JS来实现RSA加密是个很好的方法..我的网站是ASP。NET的.. 真正的难点在于用javascript实现一个和.net的RSA兼容的算法
加解密及传输流程
后台产生一对公钥私钥
传给WEB页面
登录/注册的时候,使用JS加密
后台解码.
后台产生一对公钥下发给WEB页
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="";
WEB页JS调用公钥进行加密提交
//两个加密文本框,加密后的密码保存在这里..如果是登录页面,只需要一个就可以了
<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"]);
密码编码器pwdEncode大部分原码
//这里主要使用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)
{
//将?私?钥?存ä?Session中D
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 - 博客园
paip.提升安全---网站登录密码明文传输的登录高危漏洞解决方案相关推荐
- 网站密码明文传输解决方案js+java
解决密码明文传输的方案,基本有两种解决方案 1,将项目网站全站升级为https协议(如果要更谨慎,还需要加密). 2,将密码进行加密后,在后台解密. 因项目升级https时间周期太长.将暂时替代方案改 ...
- 浅谈“密码明文传输”
一:漏洞名称: 密码明文传输 描述: 明文传输一般存在于web网站登陆页面,用户名密码采取明文传输并未采取加密(注意:一些软件如BurpSuite带有可加密的暴力破解!)容易被嗅探软件截取(如果加密方 ...
- 支付宝登录密码和淘宝登录密码一样吗
支付宝登录密码和淘宝登录密码一样吗? 不一样的.淘宝会员为一个账号,只有一个密码. 支付宝注册账号是邮箱账号来的,有一个登录密码.另外有一个支付密码.是你购物的时候最后付款用的. 我网上购物的年龄已经 ...
- FTP-用户名密码明文传输
一.实验原理 FTP协议用于用户认证的过程中,客户端与服务器是通过明文进行交互信息的. 二.实验环境 目标主机:Win2K3 192.168.20.145 攻击主机:Kali2 192.168.20. ...
- 远程修改服务器登录密码,远程服务器修改登录密码
远程服务器修改登录密码 内容精选 换一换 本文介绍如何在裸金属服务器操作系统内部修改登录密码.建议优先在控制台上重置密码,如果不可以,再尝试在操作系统内部修改登录密码.此处以CentOS 7.5版本为 ...
- 服务器登录密码 被修改,服务器登录密码被人改
服务器登录密码被人改 内容精选 换一换 云堡垒机支持批量导出资源信息,用于本地备份资源配置,以及便于快速管理资源基本信息.为加强资源信息安全管理,支持加密导出资源信息.导出的主机资源文件中包含主机基本 ...
- 阿里云ECS Ssh登录 密码栏灰色 密钥登录不上,VNC login incorrect解决
直接上解决后ssh连接阿里云服务器图片: 解决方法: 实例-0更多-密码/密钥-重置实例密码 2. 改完之后,系统自动重启一遍之后,再手动重启一遍(更多-实例状态-重启) 3.检测:实例-远程连接-w ...
- 计算机怎样记住用户名和密码,电脑浏览器怎么记住登录密码 电脑浏览器记住登录密码方法【详解】...
浏览器,这是大家现在很熟悉也经常需要使用到的电脑工具.网上冲浪绝对少不了浏览器的配合,现在随着各种浏览器技术的进步,浏览器的功能也变得日趋的强大. 现在最给力的功能应该说是浏览器的自动记住密码的功能了 ...
- 登录无线商品服务器密码,wifi登录密码是什么_wifi登录密码初始密码是多少?-192路由网...
wifi登录密码是什么? wifi登录密码的初始密码是多少? 这2个问题,经常有用户在找鸿哥咨询.下面鸿哥通过这篇文章,来详细说明wifi登录密码的问题. wifi登录密码,严谨的说法,应该是叫做路由 ...
- 校验规则自定义(身份证、姓名、企业名称、统一社会信用代码、手机号码、登录密码、二次登录密码、验证码)
切换用户类型分别校验对应的字段 注册为例,分别有两个注册类型 2是企业 3是专家 var validatesfz = async (rule, value, callback) => {if ( ...
最新文章
- [LeetCode]Maximal Rectangle
- Laravel中使用模型对数据进行操作
- 7x24小时实时互动,网易云信金融行业虚拟客服解决方案来啦!
- 有趣的js匿名函数写法(function嵌套)
- linux 项目同步,Linux项目系统,Linux控制台窗口,同步和附加到进程的Linux C ++工作负载改进...
- 基础知识之 - C# Using的用法
- UvaLive7362 Fare(欧拉函数)
- Redis 彻底禁用RDB持久化
- HIVE学习之(三)
- Windows C盘清理指北
- CI框架入门中的简单MVC例子
- 施努卡:什么是视觉定位系统 视觉系统如何定位
- 加密公司如何获得硅谷传奇风投a16z的青睐
- JAVA(五) ——类,对象,变量,方法,构造方法 【简解】
- Docker加速器 DaoCloud
- Element-Ui 双重el-tabs组件选中第二层时,刷新导致第一层选中样式丢失问题以及解决方法
- supermap javascript 点聚合
- PyQt5 Qt Designer 新手教程(一)—— 软件界面介绍
- 疫苗行业薪酬增长率在生物医药领域最为突出;华为发布全场景智能光储解决方案;开利完成对广东积微集团的收购 | 美通社头条...
- android学习步骤