用户登录是整体业务逻辑中重要的一环,又是最容易受到攻击的接口,所以确保登录安全,是公司整体业务逻辑中的重点;互联网泄漏的帐号密码量大约在1.5亿,当登录接口存在安全风险,撞库,扫号,破解密码等行为不禁会影响服务器性能,还会对用户造成极高的风险,重要业务会导致泄密事件的发生。
错误的登录逻辑
经过对登陆点的梳理,总结出现逻辑错误的类型总结
a、登录页无验证码;
b、验证码存储于cookie中;
c、正确的验证码存在于页面隐藏域中,读取隐藏域,即可得到验证码;
d、验证码与cookie值对应,当cookie值不变,验证码值不变
e、验证码更新由客户端发起请求,客户端不发起请求,验证码可无限制使用
f、验证码与帐号密码不在同一接口验证,导致验证码绕过
g、验证码以简单变形形式存于cookie中(例:base64),解码后可获得验证码
正确的登录逻辑
正确的登录逻辑应该由以下条件组成:
a、用户名密码与验证码一起提交到登录验证接口;
b、验证码错误返回提示验证码错误信息,并后台更新验证码
c、用户名或密码错误,模糊提示,用户名或密码错误,更新后端验证码具体登录逻辑图如
特殊登录点安全控制
对于特殊登录点,例如ERP外部登录,email登录,登录,此类登录需要如下安全控制方式中的种配合,才能确保安全;例如email、、erp等重要系统,帐号密码一旦被破解,可能导致泄密,甚至危及内部网络的安全,所以特殊登陆点需要以下安全防护措施:
a、验证码难度加强
b、更加严格的登录策略
c、登录成功后采用二次验证,例如手机短信验证
d、硬件ukey登录
e、采用动态令牌保护
当HTTP传输与互联网中,所有中间承载网络及设备可以嗅探到传输过程,由于业务严重性及性能考虑,在不使用HTTPS传输的前提下,签名便预防数据传输中被修改
用户A用B用户架设无线热点发送如下请求 http://www.xxx.com/order.action?user=admin&orderid = 123 B用户抓包发现连接,修改orderid,便可查询其他订单信息,导致信息泄漏
当用户提交连接时,添加对数据验证KEY防止中间人修改相关连接
function key($user,$orderid)
{
$key = md5(md5(md5($user.'0=0+0=0'.$orderid)));return $ key;
}
?>
按照以上代码生成key,生成如下连接
http://www.xxx.com/order.action?user=admin&orderid = 123&key=
c6d41ec7a47d9b3f1345ded166e6eca5
中间人即使发现连接,也无法遍历所有订单号
HTTP协议 HttpOnly属性
Cookie httponly,是设置COOKIE时,可以设置的一个属性,如果COOKIE没有设置这个属性,该COOKIE值可以被页面脚本读取。当攻击者发现一个XSS漏洞时,通常会写一段页面脚本,窃取用户的COOKIE,为了 增加攻击者的门槛,防止出现因为XSS漏洞导致大面积用户COOKIE被盗,所以应该在设置认证COOKIE时,增加这个属性。
response.setHeader("SET-COOKIE","ceshi=" + request.getParameter("cookie")+ ";HttpOnly");
HTTP协议 secure属性
Cookie http secure, 是设置COOKIE时,可以设置的一个属性,当cookie设置此属性后,只能在HTTPS传输中才能传输,否则不能传输,增加可cookie的安全性。
单次MD5加密算法问题
MD5即Message-DigestAlgorithm5(信息-摘要算法5),用于确保信息传输完整 一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍 已有MD5实现。
现在黑客会利用彩虹表和穷举算法,对于MD5加密的密码破解率相对较高,所以不建议采用单次MD5加密存储重要数据。
单次MD5加密攻击示例
某校园网络遭入侵,获取用户名及MD5加密密码,部分密码在网上彩虹表破解,破解概率75%重要数据加密中严谨使用单次MD5加密
BASE64编码安全
很多开发认为base64是加密方法,这是造成很多问题的原因,base64设计之初是为了字符编码,并不是加密,所以base64可以当作不是一眼就能看懂的明文。
Base64攻击示例
当某系统使用如下连接下载,为防止用户查看下载地址,错误的使用了base64编码下载地址,导致任意文件的下载,相关链接如下:
对于base64、escape、urlencode等编码不能当作加密算法使用,在应用中禁止自己编写加密算法,重要数据建议使用多次MD5加密、多次随机盐加密、或AES加密
随机加密算法(加盐法)
在重要数据存储时,用MD5加密、BASE64编码等方式存储均存在安全较大的安全隐 患,所以对于重要数据的存储、传输建议使用随机的加密方式。
随机函数用于加密其中方法非常多,组合法、跳变法、重排法、多模法,这里介绍一种方法:加盐法。
加盐法的最大特色是增加加密强度,它是一种动态方法。经过加盐处理可以做到,即使用同样的明文、同样的用户密码每次加密得到的密文都不一样,密码、明文、密文没有固定的对应关系,这样当然不好分析了。