1.SQL注入-登录漏洞
登录漏洞
一.没有处理单引号
当前代码暴露了绝对路径: Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given in /opt/lampp/htdocs/security/login.php on line 28 登录失败
此时x' or userid=1 #'充当了$username,SQL语句变为以下:
select * from user where username ='x' or userid=1 #'' and password ='$password'
关于userid的猜测可以基于密码字典去爆破
注入类攻击的核心点:
1.拼接有效的SQL语句或代码
2.确保完成了闭合,并且可以改变原有的执行逻辑
3.通常并非一步就可以完成拼接和闭合,需要不停的尝试,可以通过python跑字典去爆破
二.任意访问后台页面
无论登录成功与否,输入登录成功的URL即可进入后台页面
记录session:
三.隐藏绝对路径
四.加密数据库密码为密文
五.使用addslashes函数对用户名进行转义
六.使用mysqli面向对象方式
七.验证码处理
验证码生成原理(代码展示):
1.随机生成的字符,确保无规律可循
2.使用图片来展示,而非其他手段
3.尽量让文字变形并形成各类扰乱图像
八.登录次数限制
1.不建议使用图片验证码,采用短信+验证码
2.登录次数限制
3.记录用户常用ip地址区域