系统知识点(一 SQL 注入防御机制)

1.SQL注入理解与应用
要想知道如何进行SQL注入,首先我们就必须知道,到底什么才是SQL注入,通过查询百度百科可以知道:

通过对于这段话的理解,我们同样可以知道,SQL注入产生的很大一部分原因,更多是程序员自身代码编写水平造成的,使得应用程序产生了安全方面的漏洞,例如在编写程序的过程当中,是否对于敏感字符进行了相应过滤,变量是否进行了唯一性的确定等等,而SQL注入正是通过多变的查询数据手法,或者语句,通过系统本身的报错,得到攻击者希望获得信息。
2.SQL注入实例
2.1.SQL注入思路
1.寻找到SQL注入的位置
2.判断服务器类型和后台数据库类型
3.针对不通的服务器和数据库特点进行SQL注入攻击
2.2.SQL注入过程
实例网站:http:/xxx.com在我们通过各种手段(NMAP,Recon-NG,NtScan,DVWA…),获得了实例网站的各项信息时,便开始了注入。
注入的第一点便是找寻SQL注入存在的位置,此例当中,我们通过测试可以发现,其注入点便位于http://xxx.com/newss.asp?id=338,当我们在id=338后面加上一个’.1’时,可以发现页面进行了报错,而我们添加一个’.0’时,页面又返回了正常,由此可以推断,这里存在着一个可以进行注入的漏洞。
接着判断注入的类型,即字符型或者是数字型,根据测试,我们会发现,这一网站是数字型的注入,在id=338 后面加上and 1=1页面正常,and 1=2页面报错。
根据order by 的推断,可得数据库中的列表长度为11,随即进行联合查询,最终可以得到数据库的名字,以及管理员的账号密码等。在此之后,我们根据之前扫描目录时获得信息,便可进入到后台,获得自己想要的信息。
3.SQL 注入防御
3.1.代码层面
3.1.1. 检查数据类型变量以及格式
如果我们的SQL语句是类似where id={$id}这种形式,数据库里所有的id都是数字,那么就应该在SQL被执行前,检查确保变量id是int类型;如果是接受邮箱,那就应该检查并严格确保变量一定是邮箱的格式,其他的类型比如日期、时间等也是一个道理。总结起来:只要是有固定格式的变量,在SQL语句执行前,应该严格按照固定格式去检查,确保变量是我们预想的格式,这样很大程度上可以避免SQL注入攻击。
在一些注册界面的话,更是要确保使用某些检查函数进行一次彻底排查,以确保不存在特殊字符。
3.1.2. 过滤特殊字符
在一些时候,我们并不能将一些字符进行完全的过滤,例如某些文章提交界面,论坛交流区等,在这样的情况下,我们就要做到尽可能的做到对特殊字符进行转义,或者一定程度上的过滤。

第一句SQL的变量被单引号包含起来,当我们进行SQL注入的时候,面临的第一个问题就是要闭合前面的单引号,只有这样才能使后面的语句作为SQL执行,除此之外,还要记得对于原SQL语句中的后面的单引号的注释,只有经过了这样的操作,注入最终才会被成功执行,但第二句没有用引号包含变量,那我们同样也就不用取考虑关于引号方面的闭合、注释等操作,所以即便同样采用addslashes函数的转义,但同样存在着SQL攻击的漏洞。
3.1.3. 预编译语句集(PreParedStatement)
使用预编译的 SQL 语句,是防止SQL注入的一种简单有效方式,我们知道SQL注入针对的是SQL语句编译的过程,只在这一过程中存在着破坏性,而预编译语句集只是把输入串作为数据处理,而不再对SQL语句进行解析,准备,因此也就在一定的程度上避免了SQL注入问题。

在上例代码中,如果我们仍然同注入示例网站中的注入操作一样的话,会发现,尽管耗费大量的时间,但最终的结果可能并不是尽如人意,这是因为,在此例当中,username变量传递的参数,也只会当作username字符串来解释查询,而这也就从根本上杜绝了SQL注入攻击的发生。
3.1.4. 数据库信息加密
在现如今的加解密中,大致已经可以清楚的将其分为三种:
1、对称加密:即加密方和解密方都使用相同的加密算法和密钥,这种方案的密钥的保存非常关键,因为算法是公开的,而密钥是保密的,一旦密匙泄露,黑客仍然可以轻易解密。常见的对称加密算法有:AES、DES等。
2、非对称加密:即使用不同的密钥来进行加解密,密钥被分为公钥和私钥,用私钥加密的数据必须使用公钥来解密,同样用公钥加密的数据必须用对应的私钥来解密,常见的非对称加密算法有:RSA等。
3、不可逆加密:利用哈希算法使数据加密之后无法解密回原数据,这样的哈希算法常用的有:md5、SHA-1等。
如今越来越多的信息管理系统采用md5的不可逆加密算法来存储密码,但同样的,其安全性也是越发遭到了挑战,如今我们仅仅通过谷歌,或者是度娘这样的搜索引擎,就可以轻轻松松的找到大量的md5在线破解网站,例如在将e10adc3949ba59abbe56e057f20f883e这段密文填入的瞬间,我们就能够得到加密之前的密码,虽然说也不一定每一个都特别的准确,但是毫无疑问,随着时代的发展,其破解的准确会愈来愈高。
所以说,关于存储信息方面的数据库要做到对于加密后的信息,不能使其逆加密,通常的做法是为每个用户确定不同的密码加密后,再混合用户的真实密码进行md5加密。

3.2.平台方面
3.2.1. Web 应用防火墙
WEB应用防火墙是集WEB防护、网页保护、负载均衡,应用交互于一体的WEB整体安全防护设备的一款产品。它集成全新的安全理念与先进的创新架构,保障用户核心应用与业务持续稳定的运行。
WEB应用防火墙特点:
1、事前主动防御、自动分析、应用缺陷、屏蔽恶意请求、防范网页篡改、阻断应用攻击,全方位保护WEB应用。
2、事中智能响应,快速P2DR建模、模糊归纳和定位攻击,阻止风险扩散,消除“安全事故”于萌芽之中。
3、事后行为审计,深度挖掘访问行为、分析攻击数据、提升应用价值,为评估安全状况提供详尽报表。
4、面向客户的应用加速,提升系统性能,改善WEB访问体验。
5、面向过程的应用控制,细化访问行为,强化应用服务能力。
6、面向服务的负载均衡,扩展服务能力,适应业务规模的快速壮大。
3.2.2. 数据库防火墙
数据库防火墙系统,串联部署在数据库服务器之前,解决数据库应用侧和运维侧两方面的问题,是一款基于数据库协议分析与控制技术的数据库安全防护系统。DBFirewall基于主动防御机制,实现数据库的访问行为控制、危险操作阻断、可疑行为审计。
数据库安全技术之一,数据库安全技术主要包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。
数据库防火墙功能:
1、屏蔽直接访问数据库的通道:数据库防火墙部署介于数据库服务器和应用服务器之间,屏蔽直接访问的通道,防止 数据库隐通道对数据库的攻击。
2、二次认证:基于独创的“连接六元组【机器指纹(不可伪造)、IP地址、MAC地址、用户、应用程序、时间段】”授权单位,应用程序对数据库的访问,必须经过数据库防火墙和数据库自身两层身份认证。
3、攻击保护:实时检测用户对数据库进行的SQL注入和缓冲区溢出攻击。并报警或者阻止攻击行为,同时详细的审计下攻击操作发生的时间、来源IP、登录数据库的用户名、攻击代码等详细信息。
4、连接监控:实时的监控所有到数据库的连接信息、操作数、违规数等。管理员可以断开指定的连接。
5、安全审计:系统能够审计对数据库服务器的访问情况。包括用户名、程序名、IP地址、请求的数据库、连接建立的时间、连接断开的时间、通信量大小、执行结果等等信息。并提供灵活的回放日志查询分析功能,并可以生存报表。
6、审计探针:本系统在作为数据库防火墙的同时,还可以作为数据库审计系统的数据获取引擎,将通信内容发送到审计系统中。
7、细粒度权限控制:按照SQL操作类型包括Select、Insert、Update、Delete,对象拥有者,及基于表、视图对象、列进行权限控制
8、精准SQL语法分析:高性能SQL语义分析引擎,对数据库的SQL语句操作,进行实时捕获、识别、分类
9、自动SQL学习:基于自学习机制的风险管控模型,主动监控数据库活动,防止未授权的数据库访问、SQL注入、权限或角色升级,以及对敏感数据的非法访问等。
10、透明部署:无须改变网络结构、应用部署、应用程序内部逻辑、前端用户习惯等
4.防御总结
1、不要随意开启生产环境中Webserver的错误显示。
2、永远不要信任来自用户端的变量输入,有固定格式的变量一定要严格检查对应的格式,没有固定格式的变量需 要对引号等特殊字符进行必要的过滤转义。
3、使用预编译绑定变量的SQL语句。
4、做好数据库帐号权限管理。
5、严格加密处理用户的机密信息。

猜你喜欢

转载自blog.csdn.net/Aidang/article/details/89950135
今日推荐