Web应用系统安全开发课件:SQL注入漏洞与安全防护_第1页
Web应用系统安全开发课件:SQL注入漏洞与安全防护_第2页
Web应用系统安全开发课件:SQL注入漏洞与安全防护_第3页
Web应用系统安全开发课件:SQL注入漏洞与安全防护_第4页
Web应用系统安全开发课件:SQL注入漏洞与安全防护_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Web应用系统安全开发

S

Q

L

注入漏洞与安全防护5.4.1

SQL注入漏洞的威胁➢SQL注入的概念SQL注入(SQL

Injection)是一种常见的网络安全攻击技术,它利用输入验证不充分的漏洞,将恶意的SQL代码插入到应用程序的数据库执行中。通过成功执行这些恶意SQL代码,攻击者可以绕过身份验证、获取未授权的访问权限、篡改数据库内容甚至控制整个应用程序。1.

SQL

注入的方式1.

SQL

注入的方式➢SQL注入的方式(1)恶意拼接SQL语句可以查询、插入、更新和删除数据,且使用分号来分隔不同的命令。例如:SELECT*FROM

users

WHERE

user_id=$user_id;其中,user_id是传入的参数,如果传入的参数值为“1234;DELETE

FROM

users”,那么最终的查询语句会变为:SELECT*FROM

users

WHERE

user_id=1234;DELETEFROMusers;如果以上语句执行,则会删除users表中的所有数据。1.

SQL

注入的方式(2)传入非法参数SQL语句中传入的字符串参数是用单引号引起来的,如果字符串本身包含单引号而没有被处理,那么可能会篡改原本SQL语句的作用。例如:SELECT*FROM

user_nameWHEREuser_name=$user_name;如果user_name传入参数值为G'chen,那么最终的查询语句会变为:SELECT*FROM

user_name

WHERE

user_name='G'chen';一般情况下,以上语句会执行出错,这样的语句风险比较小。虽然没有语法错误,但可能会恶意产生SQL语句,并且以一种你不期望的方式运行。1.

SQL

注入的方式(3)添加额外条件在SQL语句中添加一些额外条件,以此来改变执行行为。条件一般为真值表达式。例如:UPDATEusersSETuserpass='$userpass'WHERE

user_id=$user_id;如果user_id被传入恶意的字符串“1234OR

TRUE”,那么最终的SQL语句会变为:UPDATEusersSETuserpass='123456'WHERE

user_id=1234OR

TRUE;这将更改所有用户的密码。2.

SQL注入的威胁(1)数据泄露:攻击者可以通过注入恶意SQL代码来访问和检索敏感的数据库信息,如用户凭据、个人身份信息、财务数据等。这种数据泄露可能导致隐私问题、身份盗窃和金融损失。(2)身份验证绕过:通过恶意构造的SQL查询,攻击者可以绕过应用程序的身份验证机制。这可能使攻击者能够以其他用户的身份登录,获得未授权的访问权限,并执行未经授权的操作。(3)数据篡改:通过注入恶意SQL代码,攻击者可以修改数据库中的数据,包括插入、更新或删除记录。这可能导致数据一致性问题、信息损坏,甚至系统功能故障。(4)完全控制:在某些情况下,成功的SQL注入攻击可能使攻击者能够完全控制受影响的应用程序和数据库服务器。攻击者可以执行任意的SQL查询,操纵数据、创建恶意账户、安装后门等,从而对系统进行完全的入侵和控制。(5)拒绝服务(DoS):攻击者可以利用SQL注入漏洞来执行资源密集型查询,导致数据库服务器过载,从而使应用程序无法正常运行或响应其他用户的请求。实例5-85.4.2

SQL注入漏洞的防护➢PDO(PHP数据对象)是一种在PHP中操作数据库的常用方法。参数绑定是一种在执行SQL查询时,将变量绑定到查询中的占位符的技术。使用参数绑定可以提高安全性,防止SQL注入攻击,并简化代码编写。<?php//(1)编写包含占位符的SQL查询语句,占位符使用冒号(:)或问号(?)表示$sql="SELECT*FROM

users

WHERE

username=:username";//(2)使用PDO预处理语句来准备查询$stmt=$pdo->prepare($sql);//(3)使用bindParam()方法将变量绑定到占位符$stmt->bindParam(':username',$username);//(4)在绑定完所有参数后,通过execute()方法执行查询$stmt->execute();?>1.

PDO参数绑定2.

函数转义➢虽然大部分情况下都可以通过底层DB类封装好的方法来操作数据库,比如常见的连贯操作,可是依然会有一部分操作底层是很难满足的,所以依然会存在少部分裸写SQL的情况,这个时候就得使用函数转义来保障SQL语句的结构不被改变,常见的转义函数是:(1)intval()函数当你可以明确参数的类型时,可以使用intval()转义函数把接收的参数转换一下类型,防止参数中出现一些非法的SQL语句。比如,要接收一个学生ID号,可以使用:$studentID=intval($_GET['student_ID']);(2)addslashes()函数addslashes()函数可以通过反斜杠转义所有的单引号、双引号、反斜杠,试想一下,SQL语句如下:

$id=addslashes($id);$sql="SELECT*FROM

user

WHERE

id='$id'";3.

参数规则验证(1)检查用户输入的合法性,确认输入的内容只包含合法的数据。(2)限制表单或查询字符串输入的长度。(3)检查提取数据的查询所返回的记录数量。4.

屏蔽错误消息防范SQL注入还要避免出现一些详细的错误消息,因为攻击者可以利用这些消息。要使用一种标准的输入确认机制来验证所有输入数据的长度、类型、语句、企业规则等,例如下述语句:<?php@$conn=mysqli_connect("localhost","root","")ordie("errorconnecting");?>连接数据库的时候,可以在行首加上一个@符号,就可以屏蔽错误信息输出。5.

权限控制➢对于用来执行查询的数据库账户,限制其权限

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论