浅谈数据库安全与Python编程技术.docx
- 文档编号:7087168
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:21
- 大小:968.72KB
浅谈数据库安全与Python编程技术.docx
《浅谈数据库安全与Python编程技术.docx》由会员分享,可在线阅读,更多相关《浅谈数据库安全与Python编程技术.docx(21页珍藏版)》请在冰豆网上搜索。
浅谈数据库安全与Python编程技术
软件学院大作业任务书
课程名称:
数据库工程实训
题目:
浅谈数据库安全与基于Python的SQL注入
完成时间:
2015年6月10日
大作业的要求和内容:
(包括实验目的、实验内容、作业要求、作业格式等)
实验目的:
1、检验数据库安全的基本知识点的掌握,包括数据库登陆管理、授权、角色、审核;通讯加密SSL;SQL注入攻击。
2、掌握PYTHON的基本编程技巧,以及与SQLSERVER数据库的连接方法,包括pymssql数据访问技术,flask网关技术。
3、运用已学的安全技术,来分析安全架构,和数据库安全问题。
实验内容:
1、账户安全管理:
举例账户安全管理策略
2、账户行为审计:
在sqlserver中开启审计功能,并且在远端登录时,观察审计结果。
3、客户端加密通讯SSL:
开启客户端的加密通讯功能,观察传送的用户名和密码等数据。
4、防止sql注入攻击:
用flask建立一个简单的测试页面,用pymssql模块测试sql注入攻击的防范
作业要求:
该大作业每人一份,重点描述整个项目的总体框架,以及对python和SQLSERVER这两种工具的认识体会。
总体部分包括:
1、介绍
2、数据库安全技术介绍和理解
3、账户安全管理
4、账户行为审计
5、客户端加密通讯SSL
6、防止sql注入攻击
7、总结
作业格式:
按照学院要求的大作业格式,要求封面,和正文两部分,封面包括班级、学号、姓名、指导老师等信息。
正文字体为五号宋体,标题为四号宋体。
教师小结:
成绩:
教师签名:
教研部负责人:
学生姓名:
仁晓琴
浅谈数据库安全与基于Python的SQL注入攻击
摘要
随着计算机技术和通讯技术的发展,数据库系统的安全正面临着新的问题和挑战。
本文阐述了数据库妥全的研究现状和具体标准,从管理的角度讨论了威胁数据安全的潜在因素及防范措施,在此基础上,网络服务构架技术的应用被普遍采用,许多该类型的应用程序在设计与开发时没有充分考虑到数据合法性校验问题,因此使其在应用中存在安全隐患。
在横向比较SQL注入攻击模式的基础之上,分析了SQL注入攻击的特点、原理,并对常用注入途径进行了总结。
提出在主动式防范模型的基础上,使用输入验证、SQLServer防御以及使用存储过程替代参数化查询相结合的形式构建出一种有效防范SQL注入攻击的思路和方法。
并用Pymssql模块测试表明该防范模型具有较高的实用性和安全性。
关键词:
数据库安全,flask网关技术,SQL注入攻击,SSL,Pymssql
一、数据库安全技术
现在,随着计算机技术和通讯技术的发展,计算机已经应用在人们日常生活的各个方面,它已经成为推动人类社会发展的一个重要工具。
虽然计算机给人们的生产和生活带来了方便,但是伴随而来的是出现了一系列亟待解决的问题,数据库系统的安全就是其中的一个重要组成部分。
1.1数据库存在的威胁与研究现状
数据库的安全性是指数据库的任何部分都不允许受到恶意侵害,或XX的存取与修改。
数据库是信息系统的核心部分,有价值的数据都存放在其中,这些共享的数据源,既要面对必须得可用性需求,又要面对被篡改、损坏和被盗取的威胁。
通常情况下,数据库的破坏来自下列四个方而:
(1)系统故障;
(2)并发存取而引起的数据的不一致;(3)转存或更新数据库的数据有错误,封信事务未遵守保持数据一致性的原则;(4)人为的破坏,例如数据库被非法访问,甚至被篡改或破坏。
发现威胁数据库安全的源和检查相应的措施是数据库安全性问题的两个方面,二者缺一可。
安全本身是从不断采取管理措施过程中得到的。
不过,安全,甚至用繁琐的措施加以保证的安全,也很有可能由于小小的疏忽而失去,那是经常发生的事。
在关注安全问题的同时,首先要认识到威胁安全因素的客观存在,遗憾的是,大多数的威胁源是看不到的,直至一切都太迟了。
为了防患于未然,必须在威胁成为现实之前,对造成数据库安全威胁要有一个清晰的认识。
1.1.1篡改
篡改是指对数据库中的数据XX进行修改,使其失去了原来的真实性。
篡改的形式具有多样性,但是有一点是共同的,即造成影响之前很难发现它。
篡改是由人为因素而产生的,一般来说,发生这种人为篡改有以下原因:
个人利益驱动、隐藏证据、恶作剧、无知。
1.1.2损坏
计算机信息系统中数据的真正丢失是数据库安全性所面临的一个客观存在的威胁。
其表现的形式是:
表和整个数据库或部分被删除或破坏。
产生损坏的原因有:
破坏、恶作剧、病毒。
破坏往往都带有明显的作案动机,解决起来相对比较困难。
之所以难,是因为这些破坏的人到底是来自内部还是外部时间很难认识,很难说得清楚。
恶作剧往往处于好奇给数据库造成了破坏。
这些人通过某种方式访问数据库的程序,哪怕对数据作级小的修改,都可能使全部数据变得可读。
计算机病毒任信息系统中能感染的范围非常大,因此,采取必要有效的措施进行防护很必要。
最简单的办法是限制来自外部的数据源、磁盘或在线服务的访问,并采用性能好的病毒检查程序对所有引入的数据进行强制性检查。
1.1.3窃取
窃取一般是对敏感数据的访问完成的。
窃取的方法除了将数据拷贝到软盘之类的可移动的介质上外,也可以把数据打印后取走。
窃取的主要原因有:
工商业间谍、将要离开的员工、被窃取的数据可能比想象中的更有价值。
1.2数据库安全的研究现状
在国际上,有关数据库系统的安全性的研究起步的比较早,很多国家的政府机关和一些大型企业的科研部门都投资了很多的金钱,开展了许多的实验和研讨,并且也已经获得了比较好的研究成果。
从1970年开始,美国的国防部就开展了有关数据库系统的多级安全机制的研究工作,这项研究内容主要有数据库系统安全性的需求、建立安全模型、数据仓库的保密、数据库系统的推理控制等。
另外在国际上也产生了一批安全性级别比较高的开发软件:
如SYBASE,ORACLE等的安全级别都达到了B级。
1985年12月,美国国防部依据军队对计算机系统的安全需求,制定了《可信计算机系统安全评估标准》TCSEC,这个评估标准包括4个等级、7个级别。
在国内,越来越多的人也已经认识到了数据库系统安全的重要性,也纷纷的开展了有关数据库系统安全的科学研究。
现在我国的数据库生产商都在自己所生产的软件产品中增加了数据库安全性方面的功能,如安全控制策略、数据库的备份与数据库的恢复,审计等。
从2001年开始,我国开始执行《计算机信息安全保护等级划分准则》。
在这个准则中,将数据库系统的安全级别划分为5个等级。
虽然我国对数据库安全的研究取得了一定的成就,但是由于我国开展这项工作的起步晚,底子薄,因此在国内有关数据库安全研究的理论成果和开发出来的应用软件都明显的落后于其他国家。
如我国的电力、金融、保险等行业所使用的数据库软件基本上都是使用Oracle,Sysbase,Informix等开发工具开发的,而这些软件产品的安全性级别是比较低的。
1.2.1数据库安全的具体标准
关于数据库安全的标准,在国内外上都没有一个具体的标准。
但是在通常情况下,一个数据库如果是安全的,必须要做到以下几个方面:
(1)必须做到数据库中的数据是保密的,能够阻止不合法的用户来访问数据库,能够保证数据库中的数据不被泄露和更改。
(2)必须保证数据的完整性和数据的一致性。
数据的完整性是指保证数据库中所有的数据都必须是正确的数据。
数据的一致性是指对数据库中的数据进行过若干部操作后,必须保证一切数据都处于一种一致的状态。
(3)必须保证所有的数据都是可用的,也就是要能够阻止非法用户试图对数据库的破坏,并且能够对已经损坏的数据库进行及时的修复,使得数据库中的数据始终处于一个可用的状况。
(4)必须保证对数据库进行的一切操作进行跟踪记录,以实现对修改和访问数据库的用户进行追踪,从而方便追查并防止否认对数据库进行的操作。
1.3数据库安全策略
1.3.1最小权利法则
应用程序使用连接数据库的账户应该只用于必要的特权,有利于保护整个系统尽可能少的收到入侵者的危害。
通过限制用户权限,隔离了不同账户可执行的操作,用不同的用户账号执行查询,插入,更新,删除操作,可以防止原本用于执行的SELECT命令的地方却被用于执行INSERT,UPDATE或DELETE命令。
1.3.2账号安全法则
禁用默认的root管理员账号,新建一个复杂的用户名和密码管理数据库。
1.3.3内容加密
有些网站使用SSL/SSH数据加密,但是加密技术只对数据传输过程进行加密,无法保护数据库中已有的数据库,目前对数据进行加密的数据库系统很少,可以根据系统支持的加密算法在存储时对数据进行加密,安全的保存在数据中,在检索时对数据库进行解密,实现数据的加密功能,数据库加密环节会详细分析该种技巧。
1.3.4存取控制
用户应该无权通过SQL语句来实现对系统命令的调用,这是注入Webshell时十分危险的漏洞。
身份鉴别是访问控制的基础。
对信息资源的访问还必须进行有序的控制,这是在身份鉴别后根据用户的身份进行权限的设置。
访问控制的任务是:
对系统内的所有的数据规定每个用户对它的操作权限。
存取控制可以分为下面的3种形式:
(1)自主访问控制(DAC)。
就是将用户对数据库的访问权限进行控制,让所有的用户只能访问自己有权限使用的数据。
当某一个用户具有对某些数据进行访问的权限时,他就可以把对这些数据的操作权限部分或者全部的传递给其他用户,这样其他的用户也获得了对这些数据的访问权。
(2)强制访问控制(MAC)。
它的基本原理是:
所有的实体都应该有自己的安全属性,并且每一个客体都应该遵循客体所规定的安全准则,主体能否对客体进行规定的动作主要取决于主体和客体之间安全属性的关系。
在强制访问控制方式中,用户自己不能对自己的或者别人的操作权限进行更改,一切操作权限都需要由系统管理员来进行分配。
1.4.5系统补丁
及时更新SQLSERVER的最新版本补丁,有效解决数据库漏洞问题。
二、账户安全管理与行为审计
2.1账户安全管理
2.1.1认证
认证是用来确认登录SQLServer的用户的登录帐号和密码的正确性,由此来验证其是否具有连接SQLServer的权限。
SQLServer2000提供了两种确认用户的认证模式:
1)WindowsNT认证模式。
WindowsNT具有用户安全性和帐号管理的机制,允许SQLServer也可以使用NT的用户名和口令。
在这种模式下,用户只需要通过WindowsNT的认证,就可以连接到SQLServer,而SQLServer本身也就不需要管理一套登录数据。
每一个用户和组都由它的安全标识SID标识,存储在SQLServer的master数据库的sysxlogins表的SID字段。
2)混合认证模式。
SQLServer也有自己的标准登录认证系统,在数据库中存储了帐号和加密的密码。
混合认证模式允许用户使用WindowsNT帐号登录,或者使用SQLServer标准帐号登录到SQLServer系统。
NT的用户既可以使用NT认证,也可以使用SQLServer认证。
2.1.2授权认可
授权是将一个指定通过认证的数据库用户可以使用的数据库对象、以及对这些数据库对象执行的操作的过程。
授权的基本单位是许可,即单个操作。
每个数据库都有自己独立的许可系统,在SQLServer中包括三种类型的许可:
即对象许可、语句许可和预定义许可。
2.1.3加锁
加锁指:
安装完成后,移除一些不必要的存储过程、用户和角色,并严格限制访问。
2.1.4认证操作实例
1)创建登录账号及访问的数据库
图2.1创建登录名
2)创建数据库用户
图2.2创建新用户
3)设置访问数据库的角色
图2.3设置数据库角色
4)登录查看设置结果
图2.4用新账号登录数据库
成功登录,如查询所建的表:
图2.5测试新账号登录成功
授权认可及加锁同理创建即可。
2.2SQLSERVER审计机制
2.2.1TCSEC的安全等级划分
根据美国计算机中(nationalcomputresecuritycenter,NCSC)所设立的安全等级从A至D。
A级系统是用户定制的,B级和C级是最常见的级别。
每个级别后面跟一个数字,表明它的用户敏感程度:
2是常年的级别,如C2。
C2级要求有一个登陆过程,用户控制制定的资源,并检查数据跟踪。
B2要求有访问控制特权,不允许用户为自己的文件设定安全等级。
从内容来看,这些安全级别实际上起到不安全性的事实标准,主要用于商业合同的一致性。
从安全的管理角度看,真正需要的是一个成文的安全策略和用户手册。
2.2.2SQLSERVER标准审计级别
SQLServer的标准审计有四个不同级别
(1)0,None。
SQLServer不在审计日志中记录有关登录的任何信息(缺省设置)。
(2)1,Success,SQLServer只在审计日志中记录成功登录的信息。
(3)2,Failure,SQLServer只在审计日志中记录失败登录的信息。
(4)3,All,SQLServer只在审计日志中记录成功登录和失败登录的信息。
2.2.3SQLSERVERC2级审计的启用
C2级安全是美国国家计算机安全中心(NCSC)授予那些通过“可靠计算机系统评估标准”(TCSEC)测试的系统安全等级。
SQLServer中的C2级审计,就是审计达到C2评测的要求。
启用语句如下:
execsp_configure'showadvancedoption',1GO
execsp_configure'c2auditmode',1GO
RECONFIGUREGO
图2.6启用C2级审计
重启服务器查看审计日志
图2.7查看审计日志
重启服务后,会在\ProgramFiles\MicrosoftSQLServer\MSSQL\Data文件夹中存储审计日(.trc文件),达到200M时就再产生一个新的日志文件
图2.8生成新日志文件
查看C2级审计日志中的审计命令
图2.9查看审计日志中审计命令
使用内置函数fn_trace_gettable查看审计文件
select*
from:
:
fn_trace_gettable(‘c:
\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\audittrace_20150428095242.trc’,default)
图2.10使用内置函数查看审计文件
最后:
客户端使用不存在的帐户8001711041登录SQLServer服务器,分别在服务端的SQLServer企业管理器、Windows事件查看器、SQL事件探查器中找到该登录事件。
三、客户端加密通讯SSL
3.1SSL基本原理
SecureSocketLayer,为所研发,用以保障在Internet上数据传输之安全,利用(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。
一般通用之规格为40bit之安全标准,则已推出128bit之更高安全标准,但限制出境。
只要3.0版本以上之I.E.或Netscape即可支持SSL。
SSL协议位于与各种协议之间,为提供安全支持。
SSL协议可分为两层:
SSL记录协议(SSLRecordProtocol):
它建立在可靠的(如TCP)之上,为高层协议提供、压缩、加密等基本功能的支持。
SSL(SSLHandshakeProtocol):
它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行、协商、交换加密等。
SSL提供的服务有:
1)认证用户和服务器,确保数据发送到正确的和;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
https是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
即HTTP下加入SSL层,https的安全基础是SSL,当安装了SSL的应用证书,网页的访问都要经过SSL,此时必须把HTTP:
//改为HTTPS:
//才能正常访问网页。
四、防范sql注入攻击
目前针对WEB服务器的SQL注入攻击技术层出不穷,但其内部都是利用畸形的SQL语言通过客户端浏览器与服务器之间的共享连接来实现绕过认证获取敏感信息。
而为了使WEB服务器和数据库服务器能够更好的托找功能,实现公共信息交换的目的就不可避免的暴露一些可以被攻击者非法利用的安全缺陷。
如何让系统管理者采取有效的防范措施阻止内部信息的泄露,将整个系统的威胁降至到最低是目前服务器防守的关键。
4.1SQL注入技术
Web服务器和数据库服务器都保存着重要的数据信息,如果与web服务器的搭配不恰当会被攻击蓄意输入恶意代码导致敏感信息如电子货币、信用卡卡号的泄露,造成极大的危害。
SQL注入是攻击类型的一种,是一种有效而又轻巧的渗透手段。
相当一部分程序员在编写代码的时候没有用户输入数据的合法性进行判断,使应用程序存在安全隐患。
用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL注入。
SQL注入不仅使计算机用户的敏感信息被非法浏览,修改,删除,甚至可能使用户的服务器被黑客控制,从而严重威胁网络安全。
如下图所示:
图4.1SQL注入攻击在网络安全中的位置
4.2SQL注入攻击的原理与实现
4.2.1SQL注入攻击基本原理
SQL注入攻击主要是以合法的身份为掩护通过构建畸形SQL语法组合,以常规输入方式将该组合作为参数传入系统后台,并结合系统自动执行该SQL语句来进行恶意操作。
下面简要介绍SQL注入攻击的基本原理。
假设Web项目中存在users表,其表内包含UserId和Password字段。
则有:
(1)身份验证模块中常用的两个典型SQL语句:
实现查询mylogin表。
①select*frommylogin--返回记录内容
②selectcount(*)frommylogin--返回记录数
(2)在Web应用程序的登录页面中,允许用户输入其用户名(UserId)和密码(Password)两个参数,并进行登录身份验证。
假设登录用户名为8001711041,密码为123。
则上述SQL语句将变为:
①select*frommyloginwhereUserId='8001711041'andPassword='123'
②selectcount(*)frommyloginwhereuserId='8001711041'andPassword='123'
正常情况下,第①条SQL查询如果返回一条用户记录,则说明身份验证成功;反之,则说明身份验证失败。
第②条SQL查询如果返回用户记录数量为1,则说明身份验证成功;返回值为0或>1,则说明身份验证失败。
(3)如果分别为UserId和Password两个参数赋畸形值,则上述SQL语句就会变为:
①select*frommyloginwhereUserId='8001711041'or1=1--andPassword='111'
语句①中有两个判断条件,只要其中一个为真,则身份验证就会成功,而1=1恒为真。
②selectcount(*)frommyloginwhereUserId='8001711041'and1=1--andPassword='111'
同理,该语句中只要能确定用户名已知,则身份验证就会成功。
综上所述,使用此方法还可以实现对数据库中的数据进行删除、查询、插入和更新等危险操作。
4.2.2SQL注入攻击的常用途径
攻击者可以通过很多方法来达到控制数据库的目的,以下是常用途径。
(1)借助扩展存储过程(xp_cmdshell)以SQL-Server用户的身份在数据库服务器上执行命令;
(2)借助扩展存储过程(xp_regread)读取注册表的键值,也包括SAM(只要SQL-Server是以一个本地账号运行的);
(3)改变服务器设置;
(4)实现跨服务器的联合查询;
(5)创建客户扩展存储从而在SQL-Server进程内运行exploit;
(6)用“bulkinsert”语句去读服务器上任何文件;
(7)用bcp在服务器上创建任何文本文件;
(8)用sp_OACreate,sp_OAMethod和sp_OAGetProperty系统存储过程来创建ActiveX对象来完成ASP脚本可以做的任何事情。
4.2SQL注入攻击防范方法
SQL注入攻击的检测分为事前检测和事后检测两种。
检测的目的就是为制定和完善Web项目的防范模型与执行模块。
所以设计主动式防范模型,在Web项目中合理嵌入防范SQL注入模块是Web项目设计和开发者必须要考虑的问题。
防范模型可以选择SQL注入攻击自动防范模型,如图1所示。
图4.2SQL注入自动防范模型
在构建执行模块时,应该考虑使用输入验证和SQLServer防御相结合的方法来实现。
SQL注入攻击防范方法目前已经有很多,总结起来有以下方法:
(1)在服务端正式处理之前对提交数据的合法性进行检查;
(2)封装客户端提交信息;
(3)替换或删除敏感字符或字符集
(4)屏蔽出错信息
(5)不要用字串连接建立SQL查询,而使用SQL变量,因为变量不是可以执行的脚本;
(6)目录最小化权限设置,给静态网页目录和动态网页目录分别设置不同的权限,尽量不给写目录权限;
(7)修改或者去掉WEB服务器上默认的一些危险命令,例如ftp、cmd、wscript等,需要时在复制到相应目录;
(8)数据敏感信息非常规加密,通常在程序中对口令等敏感信息加密都是采用md5函数进行加密。
由于SQL注入攻击是针对应用开发过程中的编程漏洞,因此对于绝大数防火墙来说,这种攻击时可以绕过的。
虽然数据库服务器的版本一直在更新,各种脚本语言本身的漏洞也越来越少,可是随着SQL注入技术的不断提高,只要WEB应用系统或源编码中仍然有此类漏洞,就会潜伏着这种隐患,特别是党SQL注入攻击与其他的一些攻击工具结合时,对服务器乃至系统都是巨大的威胁,因此研究SQL注入攻击方法,如何正确的对服务器进行安全配置,如何做好代码的安全编写与用户输入的过滤检查,对于开发安全的WEB应用程序有着重要的意义。
4.3基于Python的简单案例
1)创建myweb数据库,新建mylogin表
图4.3创建数据库和表
2)在windows7环境下,python3和python3的开发工具anaconda3,创建开发环境。
当需要运行python3编程环境时,运行c:
\anaconda3\scripts\spyder.exe。
3)将flask的安装目录拷贝到d:
盘根目录下,进入flask的安装目录,运行pythonsetup.pybuildinstall
图4.4安装flask-0.10.1
4)将pymssql的安装文件拷贝到d:
盘根目录下,运行easy_installpymssql-2.1.1-py3.4-win32.egg完成安装
图4.5安装pymssql-2.1.1-py3.4-win32.egg
5)在d:
盘根目录建立目录m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浅谈 数据库 安全 Python 编程 技术
![提示](https://static.bdocx.com/images/bang_tan.gif)