Web安全与防护 (微课版) 课件 项目三 安全的数据库交换_第1页
Web安全与防护 (微课版) 课件 项目三 安全的数据库交换_第2页
Web安全与防护 (微课版) 课件 项目三 安全的数据库交换_第3页
Web安全与防护 (微课版) 课件 项目三 安全的数据库交换_第4页
Web安全与防护 (微课版) 课件 项目三 安全的数据库交换_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

项目三

安全的数据库交换Web安全与防护本任务要点学习目标SQL的基本操作。动态网页的实现方法。能够实现数据库的增删查改。能够使用PHP实现数据库交互功能。任务一

登录认证功能实现目录CONTENTS01/熟悉SQL的基本操作02/熟悉动态网页的实现方法SQL的基本操作01什么是数据库?数据库是指按照一定数据模型组织、存储和管理数据的集合。常见的数据库有关系型数据库(如MySQL、Oracle、SQLServer等)和非关系型数据库(如MongoDB、Redis、Cassandra等)。关系型数据库是目前应用最广泛的数据库之一,其数据以表格的形式进行组织和存储,由多个数据表之间的关系来表达数据间的联系。SQL是关系型数据库最常用的查询语言,可用于对数据库中的数据进行增删改查等操作。常用的SQL命令包括:SELECT:查询数据、INSERT:插入数据、UPDATE:更新数据、DELETE:删除数据SELECT:查询数据的基本用法完整代码见教材2.4.1INSERT:插入数据的基本用法SQL的基本操作01SELECTcolumn1,column2,...FROMtable_nameWHEREcondition;SELECT语句用于从一个或多个表格中选取数据,并返回查询结果。其中,column1,column2,

...表示需要查询的列名,table_name表示要查询的表格名称

,condition表示查询条件。SELECT*FROMusers;例如,查询一个名为users的表格中的所有数据:INSERT语句用于向一个表格中插入新数据。其中,table_name表示要插入数据的表格名称,column1,column2,...表示需要插入数据的列名,value1,value2,...表示要插入的数据值。INSERT

INTOtable_name(column1,column2,...)VALUES(value1,value2,...);例如,向一个名为users的表格中插入一条新数据,其username列的值为"Tom",password列的值为"123456"。INSERT

INTOusers(username,password)VALUES('Tom','123456');UPDATE:更新数据的基本用法完整代码见教材2.4.1DELETE:删除数据的基本用法SQL的基本操作01UPDATE语句用于更新一个或多个表格中的数据。其中,table_name表示要更新数据的表格名称,column1=value1,column2=value2,...表示需要更新的列名和对应的数据值,condition表示更新数据的条件。例如,将一个名为users的表格中,username为"Tom"的记录的password更新为"654321"。INSERT语句用于向一个表格中插入新数据。其中,table_name表示要插入数据的表格名称,column1,column2,...表示需要插入数据的列名,value1,value2,...表示要插入的数据值。例如,向一个名为users的表格中插入一条新数据,其username列的值为"Tom",password列的值为"123456"。UPDATEtable_nameSETcolumn1=value1,column2=value2,...WHEREcondition;UPDATEusersSET

password='654321'

WHEREusername='Tom';DELETE

FROMtable_nameWHEREcondition;DELETE

FROMusersWHEREusername='Tom';什么是动态网页?动态页面通常指的是网页内容不是静态的,而是根据用户请求、数据库查询结果或其他实时数据生成的。动态页面通过服务器端脚本、数据库、模板引擎、框架、CMS、API和云服务等技术实现,以提供个性化和交互性强的用户体验。动态网页的实现方法02Python提供了一个名为“sqlite3”的内置模块来连接和操作SQLite数据库。此外,Python还有流行的库它们提供了更高级别的抽象,使开发人员可以更容易地与多种数据库交互。PythonJava开发人员通常使用JavaDatabaseConnectivity(JDBC)API来连接和操作数据库。JDBC是Java平台的标准API,提供了一组标准接口,用于连接到不同类型的数据库。JavaC#开发人员通常使用.NETFramework中的ADO.NET库来连接和操作数据库。ADO.NET提供了一组用于连接到不同类型数据库的类和接口,开发人员可以使用这些类和接口来执行常见的数据库操作。C#PHP开发人员通常使用PHPDataObjects(PDO)扩展库来连接和操作数据库。PDO提供了一个跨数据库的抽象层,使开发人员可以更轻松地在不同的数据库之间切换,并且可以使用相同的API来执行常见的数据库操作。PHP动态网页的实现方法02在Web应用程序中,用户身份的认证是必不可少的。通常情况下,用户的身份信息需要存储在数据库中。首先,我们需要在数据库中创建一个表来存储用户的身份信息。为了保证密码的安全性,通常将密码加密后存储在数据库中。完整代码见教材3.1.2动态网页的实现方法02我们需要校验用户提供的用户名和密码是否正确,可以从blog_admin表中查询数据库中记录的用户名和密码与用户提交的用户名和密码是否一致。SELECT*FROMblog_adminWHEREusername=?AND

password=?为了保证系统的安全性,我们需要对用户输入的敏感信息使用MD5算法进行加密。接着,我们通过SQL语句查询数据库中是否有对应的记录。如果存在,则说明用户输入的用户名和密码是正确的;否则,就说明输入的用户名或密码有误。完整代码见教材3.1.2动态网页的实现方法02当用户的登录请求得到响应时,我们需要记录用户的登录日志。我们记录用户登录信息,包括IP地址、登录时间和是否认证失败等字段。此外,我们还设置了限制IP地址在单位时间内的认证次数,以防止恶意攻击。如果在限制时间内认证失败次数超过5次,则不允许用户进行认证。完整代码见教材3.1.2动态网页的实现方法02通过以上步骤,我们就可以实现用户的身份认证,并保证了系统的安全性。为了实现博客文章的存储,我们需要在数据库中创建一个blog_article表,其中包含文章标题、作者、发布时间、文章内容、分类和文章ID等字段。完整代码见教材3.1.3动态网页的实现方法02在PHP中,我们可以使用mysqli_query函数来执行SQL语句,包括查询和修改操作。对于文章的显示和编辑操作,我们需要根据文章的ID从blog_article表中查询相应的文章信息。完整代码见教材3.1.3动态网页的实现方法02对于评论的显示和添加操作,我们需要根据文章的ID从blog_comment表中查询相应的评论信息以上是基本的文章存储和显示逻辑为了查询文章,我们需要使用SQL的SELECT语句,并在WHERE子句中使用LIKE操作符来模糊匹配文章的标题和分类。完整代码见教材3.1.4动态网页的实现方法02在查询文章之后,我们需要对查询结果进行分页处理,以便在页面上显示多个搜索结果。我们可以使用PHP的$_GET变量来实现分页以上我们就实现了网站的文章搜索功能。用户可以输入关键字搜索相关的文章,并在分页中查看多个搜索结果。课堂实践一、任务名称:实现动态网页功能二、任务内容:编辑博客系统源码实现博客文章的编辑和查询。三、工具需求:PHP开发工具四、任务要求:完成实践练习后,由老师检查完成情况。课堂思考一、如何选择关系型和非关系型数据库?什么情况下适合使用每种类型的数据库?二、如何编写高效的SQL查询?三、如何平衡规范化和性能?四、如何使用索引来提高查询性能?课后拓展:权限控制安全测试请同学们对我们的数据库系统进行测试,特别关注数据库的权限管理和认证。找出用户权限控制机制和数据访问中存在的潜在问题,并思考如何进行改进和解决。THANK

YOUToBeContinued项目三

安全的数据库交换Web安全与防护本任务要点学习目标SQL注入漏洞的概念。SQL注入漏洞的分类。SQL注入漏洞的危害。熟悉SQL注入漏洞的类型。掌握SQL注入漏洞的特点任务二

SQL注入漏洞分类的理解目录CONTENTS01/SQL注入漏洞的概念02/SQL注入漏洞的分类03/SQL注入漏洞的危害SQL注入漏洞的概念01什么是SQL注入漏洞的概念?SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如果Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。SQL注入漏洞的概念01另外,在网站开发过程中,开发人员使用动态字符串构造SQL语句,用来创建所需的应用,这种情况下SQL语句在程序的执行过程中被动态的构造使用,可以根据不同的条件产生不同的SQL语句.通过把恶意的SQL命令插入到Web表单中提交、输入域名或页面请求的查询字符串中,注入到后台数据库引擎,欺骗服务器执行恶意的SQL命令SQL注入漏洞没有对输入的数据进行过滤(过滤输入);没有对发送到数据库的数据进行转义(转义输出)。原因SQL注入漏洞的概念01SQL注入漏洞的分类02字符串类型的注入注入点数据类型数字类型的注入、字符串类型的注入、搜索型注入数据提交方式GET注入、POST注入、COOKIE注入、HTTP头注入获取信息方式基于布尔的盲注、基于时间的盲注、基于报错的注入、联合查询注入、堆查询注入SQL注入漏洞的危害031数据库信息泄漏数据库中存放的用户的隐私信息的泄露。2网页篡改通过操作数据库对特定网页进行篡改。3网站传播恶意软件修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。4数据库被恶意操作数据库服务器被攻击,数据库的系统管理员帐户被窜改。5服务器被远程控制被安装后门,经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。6破坏硬盘数据瘫痪全系统。课堂实践一、任务名称:探索SQL注入基础知识二、任务内容:通过模拟SQL注入攻击,理解SQL注入的原理、类型、危害,并学习基本的防御措施。三、工具需求:Burp、数据库管理工具四、任务要求:完成实践练习后,由老师检查完成情况。课堂思考一、SQL注入是如何工作的?有哪些常见的注入点?二、有哪些不同类型的SQL注入?三、为什么开发者需要关注并理解SQL注入?四、有哪些有效的防御SQL注入的策略?课后拓展:安全事件SQL注入攻击请同学们通过互联网查找近5年内与SQL注入攻击的网络安全事件,分析导致相关安全事件发生的原因,提交word文档或PPT,下节课会抽点部分同学上来给大家分享一下自己了解到SQL注入攻击的安全事件案例。THANK

YOUToBeContinuedWeb安全与防护本任务要点学习目标绕过后台登录(字符型注入)文章页面注入(数字型注入)搜索框注入(搜索框注入)SQL注入漏洞进阶能够检测出系统中存在的漏洞。能够对SQL注入漏洞进行安全验证。任务三

SQL注入漏洞检测与验证项目三

安全的数据库交换目录CONTENTS01/绕过后台登录(字符型注入)02/文章页面注入(数字型注入)03/搜索框注入(搜索框注入)04/SQL注入漏洞进阶绕过后台登录(字符型注入)01什么是验绕过后台登录(字符型注入)?字符型注入是指攻击者通过输入恶意的SQL语句来绕过应用程序的输入验证,并执行未经授权的操作。常见的字符型注入攻击有绕过后台登录、获取敏感信息、修改数据等。绕过后台登录是一种常见的字符型注入攻击,攻击者通过修改登录表单中的用户名和密码的输入值,构造出恶意的SQL语句来实现绕过登录的目的。通过修改登录表单的输入值来实现绕过登录。完整代码见教材3.3.1攻击者可以在登录表单中输入类似于'or1=1--的字符串绕过后台登录(字符型注入)01SELECT*FROMusersWHEREusername=''

or1=1--'ANDpassword=''由于or1=1始终为真,攻击者将绕过用户名和密码的验证,并成功登录到后台。查看博客系统源码admin/check.php文件。这段代码的SQL注入漏洞在于用户登录验证的SQL查询中。由于用户输入的用户名和密码没有经过充分的验证和过滤,直接拼接到SQL语句中,导致攻击者可以在输入的用户名或密码中注入恶意SQL代码,改变SQL查询语句的执行逻辑。完整代码见教材3.3.1绕过后台登录(字符型注入)01admin/check.php如果黑客在用户名输入框中输入admin'--,密码输入框中输入任意密码。那么会因为--表示注释掉后面的SQL代码,因此上面的查询语句实际上只验证了用户名为admin,而不会验证密码是否正确,从而绕过了认证,进入管理员界面,实施进一步的攻击。绕过后台登录(字符型注入)01SELECT*FROMblog_adminWHEREusername='admin'--'ANDpassword='任意密码'登录页面http://localhost/admin/login.php。在用户名输入框面输入任意用户名,密码框中输入任意密码。启动Burp在Intruder中开启截断。在登录页面中点击提交,Burp中拦截到请求将请求转发至重发器(Repeater),先不修改用户名密码测试是否能够成功登录。响应结果。绕过后台登录(字符型注入)01可以看到服务器响应了‘用户名或密码错误’,修改用户名为1111'or1=1--并输入新的验证码点击发送请求(Send)响应结果。并看见了服务器响应的“登录成功”,说明我们所构造的字符型SQL注入语句执行成功。什么是文章页面注入(数字型注入)?数字型注入是SQL注入的一种形式,它是通过在SQL语句中嵌入恶意数字来实现的。与字符型注入不同,数字型注入不是通过将SQL语句的字符串参数替换为恶意代码字符串来实现的,而是将数字参数替换为恶意代码数字来实现的。文章页面注入(数字型注入)02数字型注入是指攻击者在输入框中输入的字符串被直接拼接到SQL语句中,例如在登录时,攻击者输入'or'1'='1,文章页面注入(数字型注入)02攻击者利用了SQL的逻辑运算符或注释符号(如--或/**/),将原本的SQL语句改变为自己所期望的语句,从而绕过了应用程序的验证和控制,获取了非授权的信息或操作权限。数字型注入是指攻击者在输入框中输入的数字被直接拼接到SQL语句中,例如在文章搜索时,攻击者输入1or1=1。SELECT*FROMusersWHEREusername=''

OR

'1'='1'

AND

password=''SELECT*FROMarticlesWHEREid=1OR1=1攻击者利用了SQL的布尔逻辑运算符,将原本的SQL语句改变为自己所期望的语句,从而绕过了应用程序的验证和控制,获取了非授权的信息或操作权限。数字型注入通常发生在数字类型的查询参数上,例如整数和浮点数。例如,一个网站可能有一个页面,该页面的URL包含一个数字参数,用于选择要显示的文章。攻击者可以通过向URL中添加一个额外的数字参数并在其中嵌入SQL代码,来尝试注入恶意代码。/article.php?id=1攻击者可以通过在id参数中注入SQL代码来获取其他文章的内容。/article.php?id=1;SELECT*FROMarticlesWHEREid=2$id来自于用户通过id参数提交的值,并且未经过过滤和转义。完整代码见教材3.3.2apps/view.php文章页面注入(数字型注入)02访问http://localhost/index.php?class=view&id=1页

面。文章页面注入(数字型注入)02文章页面注入(数字型注入)02尝试SQL注入:http://localhost/index.php?class=view&id=1%20and%201=1,访问页面发现响应正常,说明SQL语句成功执行。再尝试访问http://localhost/index.php?class=view&id=1%20and%201=2,使查询条件不成立查看响应为异常页面说明该处存在注入点。文章页面注入(数字型注入)02搜索框注入(搜索框注入)03什么是搜索框注入(搜索框注入)?搜索框注入是一种常见的SQL注入类型,攻击者通过在网站的搜索框中输入恶意的搜索参数,从而修改SQL查询语句,获取未经授权的信息。搜索框注入属于字符型注入,和前面的数字型注入有所不同。搜索框注入的原理与字符型注入类似,攻击者通过在搜索框中输入特定的字符,改变SQL语句的执行,达到绕过用户验证或者篡改数据的目的。常见的攻击方式包括:单引号、双引号、注释符、通配符、逻辑运算符等。网站在搜索框中执行以下SQL语句来查询数据。攻击者攻击者可以在搜索框中输入以下内容。那么最终执行的SQL语句将变成:这类注入主要是在进行数据搜索时没过滤搜索参数,一般在链接地址中有”keyword=关键字”,有的不显示链接地址,而是通过搜索框表单提交。此类注入点提交的SQL语句,其原型大致为:搜索框注入(搜索框注入)03SELECT*FROMproductsWHEREnameLIKE'%$_POST[search]%';'OR1=1--SELECT*FROMproductsWHERE

nameLIKE'%'

OR1=1--'%';

当我们提交注入参数为keyword=’and[查询条件]and‘%’=’,则想数据库提交的SQL语句为:SELECT*form表名WHERE

字段LIKE'%关键字%'

SELECT*form表名WHERE

字段LIKE'%AND[查询条件]AND'%'='%'查看博客系统源代码文件apps/search.php源码完整代码见教材3.3.3apps/search.php搜索框注入(搜索框注入)03访问http://localhost/index.php?class=search在搜索框中输入'and1=1--'%进行搜索响应页面。搜索框注入(搜索框注入)03再在搜索框中输入'and1=2--'%进行搜索响应页面。分析两次代码的差异可以看出,我们所构造的SQL语句是被数据库当做正常查询语句执行了,即搜索框中存在SQL注入漏洞。搜索框注入(搜索框注入)03SQL注入漏洞进阶04什么是SQL注入?SQL注入是一种常见的网络攻击技术,攻击者利用不正确的登陆认证或者不安全的SQL语句来修改数据库查询的行为,从而获取敏感信息或控制数据库。SQL进阶技巧有:盲注漏洞、堆叠注入漏洞、二次注入漏洞。盲注漏洞盲注是SQL注入的一种高级技术。当服务器端的应用程序未返回有关注入的数据信息时,就需要使用盲注技术来执行SQL注入。盲注通常包括两种类型:基于布尔的盲注和基于时间的盲注。基于布尔的盲注是通过SQL语句的执行结果(true或false)来确定是否存在漏洞,而基于时间的盲注是通过等待SQL语句的执行结果来确定是否存在漏洞。例如,下面是一个简单的查询语句。如果攻击者使用

以下注入字符串:则SQL语句将变为:SQL注入漏洞进阶04SELECT*FROMusersWHEREusername='admin'

AND

password='password''OR1=1--SELECT*FROMusersWHEREusername=''

OR1=1--'ANDpassword='password'这个SQL语句的执行结果将始终为真,因为OR1=1总是为真。如果应用程序的响应不会泄漏有关查询结果的信息,那么攻击者可能需要使用基于时间的盲注来测试SQL语句的执行时间,以确定是否存在漏洞。堆叠注入漏洞堆叠查询是一种高级的SQL注入技术,攻击者可以利用它在一次请求中执行多个查询。例如,,考虑以下代码。攻击者可以构造以下注入字符串:这个字符串将被解释为两个查询SQL注入漏洞进阶04这将导致一个新用户(hacker)被添加到用户表中,而管理员(admin)的登录将成功。SELECT*FROMusersWHEREusername='admin';INSERT

INTOusers(username,password)VALUES('hacker','password');--'ANDpassword='';

二次注入漏洞二次注入是一种SQL注入技术,攻击者在数据库中创建恶意脚本,然后诱使另一个用户(通常是管理员)执行这些脚本。例如,考虑以下代码。攻击者可以构造以下注入字符串:在进阶的SQL注入中,黑客不仅可以执行SELECT语句,还可以执行UPDATE、DELETE和INSERT等对数据进行更改的语句;且能通过SQL语句的特点构造出恶意代码;以及利用一些数据库的漏洞来进行注入攻击。SQL注入漏洞进阶04课堂实践一、任务名称:识别SQL注入点二、任务内容:找出Web应用程序中可能存在SQL注入的输入点。三、工具需求:Burp、sqlmap四、任务要求:完成实践练习后,由老师检查完成情况。课堂思考一、SQL注入是如何工作的?二、如何通过分析数据库和应用程序日志来发现潜在的SQL注入尝试?三、使用哪些工具或技术来验证SQL注入漏洞的有效性?四、SQL注入如何利用应用程序的漏洞的?课后拓展:实战演练SQL注入漏洞请同学们浏览找出Web应用程序中可能存在SQL注入的输入点并通过SQL注入漏洞,尝试提取数据库中的用户信息、管理员密码、敏感业务数据等。THANK

YOUToBeContinuedWeb安全与防护本任务要点学习目标参数化查询绕过后台登录修复(字符型注入)文章页面注入漏洞修复(数字型注入)搜索框注入漏洞修复(搜索框注入)能够修复系统中存在的漏洞。能够对已修复的漏洞进行复测。任务四

SQL注入漏洞修复与规范项目三

安全的数据库交换目录CONTENTS01/参数化查询02/绕过后台登录漏洞修复(字符型)03/文章页面注入漏洞修复(数字型注入)04/搜索框注入漏洞修复(搜索框注入)参数化查询01什么是参数化查询?参数化查询是一种防止SQL注入攻击的数据库查询方法。它通过将SQL查询语句和查询参数分离,以一种安全的方式传递用户提供的输入参数,从而避免了SQL注入攻击。参数化查询的出现就是为了保证应用程序安全和性能。在参数化查询中,SQL查询语句中的输入参数是使用占位符来表示的。这些占位符会被传递给查询处理器,然后再与查询语句合并,生成一个完整的SQL查询语句。在这个过程中,输入参数的值会被安全地转义,以避免SQL注入攻击。参数化查询的原理是使用预处理语句来处理查询语句。参数化查询可以大大降低应用程序被SQL注入攻击的风险。参数化查询提高应用程序的性能。参数化查询不适用于动态查询语句和复杂查询。参数化查询的实现需要一些额外的编码工作。参数化查询的优点参数化查询的缺点参数化查询01假设我们有一个用户登录的页面,用户需要输入用户名和密码来登录。我们使用PHP和MySQL来实现这个功能。完整代码见教材3.4.1参数化查询01我们使用了mysqli_prepare函数来准备SQL查询语句,并将需要传递给查询语句的参数用问号?替代。接着,使用mysqli_stmt_bind_param函数来绑定参数,参数的类型和值通过该函数的参数传递。最后,使用mysqli_stmt_execute函数执行查询语句并获取结果集。这样,就可以避免SQL注入攻击。完整代码见教材3.4.1参数化查询01绕过后台登录修复(字符型注入)02博客程序源码admin/check.php中代码存在SQL注入漏洞,在该段代码中存在SQL注入漏洞的地方是:其中,变量$username和$password是通过$_POST方式从前端获取的,没有经过参数化处理。攻击者可以通过构造特定的输入,比如在用户名输入框中输入'or1=1--,使得SQL语句变为:SELECT*FROMblog_adminWHEREusername=''

or1=1--'ANDpassword='e10adc3949ba59abbe56e057f20f883e'此时,SQL语句将会查询所有用户名,并忽略密码验证,攻击者可以成功登录系统,甚至篡改数据库。绕过后台登录修复(字符型注入)02修复SQL注入漏洞的方法是使用参数化查询,将SQL语句中的变量通过占位符的方式传入,而不是通过字符串拼接的方式。使用mysqli_prepare()函数创建一个预处理语句$stmt然后使用mysqli_stmt_bind_param()函数绑定参数,其中"ss"表示参数类型都是字符串类型。最后使用mysqli_stmt_execute()函数执行预处理语句,并使用mysqli_stmt_get_result()函数获取查询结果。将请求转发至重发器(Repeater),先不修改用户名密码测试是否能够成功登录。响应结果。绕过后台登录修复(字符型注入)02=1111'or1=1--在Burp中打开拦截请求,将拦截到的请求转发至重发器,并构造SQL注入语句,最后将发送请求并查看响应。分析响应可以看出同一个SQL注入已经失效了,服务器响应了`用户名或密码错误。说明构造的SQL注入语句并未被数据库执行。文章页面注入漏洞修复(数字型注入)03博客程序源码apps/view.php中代码存在SQL注入漏洞,在该段代码中存在SQL注入漏洞的地方是:攻击者可以通过在URL中添加SQL语句来修改原始查询,注入恶意SQL语句。针对这一问题,可以采用以下两种方案,完善博客程序源码apps/view.php的代码,修复存在SQL注入漏洞。http:///view.php?id=1;DELETEFROMblog_article;

文章页面注入漏洞修复(数字型注入)031)使用mysqli_prepare()函数创建预处理语句,将SQL查询语句作为参数传递给它,例如:$stmt=mysqli_prepare($conn,"SELECT*FROMblog_articleWHEREid=?");2)使用mysqli_stmt_bind_param()函数将参数绑定到预处理语句中。第一个参数是预处理语句的句柄,第二个参数是参数类型字符串,用于指定每个参数的类型,例如i表示整数类型,s表示字符串类型等。第三个参数是实际的参数值,例如:mysqli_stmt_bind_param($stmt,"i",$_GET['id']);3)使用mysqli_stmt_execute()函数执行预处理语句;4)使用mysqli_stmt_get_result()函数获取查询结果集。使用预处理语句和绑定参数是一种防止SQL注入攻击的有效方法,因为它会确保查询参数被视为值而不是SQL代码的一部分。预处理语句会先将SQL语句和参数分开处理,再发送到MySQL服务器,从而有效地减少了SQL注入的风险。方案一:使用预处理语句和绑定参数,将查询语句和参数分离开来,从而避免使用用户输入来拼接SQL查询语句,也避免了潜在的SQL注入攻击。文章页面注入漏洞修复(数字型注入)03首先使用了参数化查询方式将$id参数传递给SQL语句。然后使用了prepare()方法准备SQL语句,并使用bind_param()方法绑定参数值。最后使用execute()方法执行SQL语句,将结果保存到$result3变量中。修改完成后再构造如下SQL注入语句:方案二:使用参数化查询的方式,将$id参数传递给SQL语句,而不是直接将其作为字符串拼接到SQL语句中。http://localhost/index.php?class=view&id=1%20and%201=1

文章页面注入漏洞修复(数字型注入)03访问该URL响应再次构造如下SQL注入语句http://localhost/index.php?class=view&id=1%20and%201=2

文章页面注入漏洞修复(数字型注入)03访问该URL响应分析响应可以看出同一个SQL注入已经失效了,服务器在1=1和1=2都返回了相同响应。说明构造的SQL注入语句并未被数据库执行。数字型注入是指攻击者在输入框中输入的字符串被直接拼接到SQL语句中,例如在登录时,攻击者输入'or'1'='1,文章页面注入(数字型注入)02攻击者利用了SQL的逻辑运算符或注释符号(如--或/**/),将原本的SQL语句改变为自己所期望的语句,从而绕过了应用程序的验证和控制,获取了非授权的信息或操作权限。数字型注入是指攻击者在输入框中输入的数字被直接拼接到SQL语句中,例如在文章搜索时,攻击者输入1or1=1。SELECT*FROMusersWHEREusername=''

OR

'1'='1'

AND

password=''SELECT*FROMarticlesWHEREid=1OR1=1攻击者利用了SQL的布尔逻辑运算符,将原本的SQL语句改变为自己所期望的语句,从而绕

温馨提示

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

评论

0/150

提交评论