SQL注入--个人学习笔记
SQL注入概念
SQL注入是服务器端未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改并成功执行的行为。
为什么会有SQL注入
1.代码带入SQL语句的参数过滤不严格
2.未启用框架的安全配置,例如:PHP的 magic_quotes_gpc
3.未启用框架安全的查询方法
4.测试接口未删除
5.未启用防火墙 例如:iptabels
6.未使用其他的安全防护设备, WAF…
任何和数据可产生交互的地方都有可能存在注入
漏洞危害
1.数据库信息泄露:数据库中存放的用户隐私信息的泄露。
2.网页篡改:通过操作数据库对特定网页进行篡改。
3.网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击
4.数据库被恶意操作:数据库服务器被攻击,数据可得系统管理员账户被篡改。
5.服务器被远程控制,被后门安装,经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
整形注入
1.判断是否有注入(判断是否未严格校验)第一要素
1)可控参数的改变是否影响页面显示的结果。
2)输入的SQL语句是否能报错-能通过数据库回显的报错,看到数据库的一些语句痕迹
3)输入的SQL语句能否不报错–能否成功闭合。
2.什么类型的注入
3.语句能否被恶意修改 第二个要素
4.能否成功执行行 第三个要素
5.获取我们想要的数据。
SQL注入防御手段
代码层
黑名单 //不允许什么字符出现 ‘’ “” ,select 等等
白名单 //只允许某些字符通过
敏感字符过滤 // ‘’ “” @ # 等一律过滤掉
使用框架安全查询
规范输出 //只输出正确或者错误,不输出任何SQL哪里出错
配置层
开启GPC //过滤敏感字符
使用utf8 //根据业务灵活使用
物理层
WAF //web应用防火墙
数据库审计 //可以通过日志查看进行了什么操作
云防护 //数据清洗后再传入到服务器
IPS(入侵防御系统)