注入攻击课件_第1页
注入攻击课件_第2页
注入攻击课件_第3页
注入攻击课件_第4页
注入攻击课件_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

第4章注入攻击第4章注入攻击1第4章注入攻击课件2A1-注入攻击注入攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者访问未被授权的数据。常见注入攻击漏洞,如SQL,OS命令注入。A1-注入攻击注入攻击发生在当不可信的数据作为命令或者查询语3注入攻击-SQL注入概述原理字符型SQL注入数字型SQL注入实例演示防御注入攻击-SQL注入概述4注入——SQL注入预备知识SQL语言结构化查询语言(StructuredQueryLanguage)简称SQL:是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。注入——SQL注入预备知识5注入——SQL注入常见SQL语句选择:select*fromtable1where范围

插入:insertintotable1(field1,field2)values(value1,value2)

删除:deletefromtable1where范围

更新:updatetable1setfield1=value1where范围

查找:select*fromtable1wherefield1like’%value1%’---like的语法很精妙,查资料!1=1,1=2的使用,在SQL语句组合时用的较多“where1=1”是表示选择全部

“where1=2”全部不选链接资源:/yubinfeng/archive/2010/11/02/1867386.html注入——SQL注入常见SQL语句6注入——SQL注入一、概述1、SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,从而得到黑客所需的信息。2、当应用程序使用输入内容来构造动态SQL语句以访问数据库时,或者使用包含未筛选的用户输入的字符串来传递的存储过程都有可能发生SQL注入。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得更严重。注入——SQL注入一、概述7SQLInjection:字符串参数/login.asp管理员管理员程序员考虑的场景:Username:adminPassword:p@$$w0rdSELECTCOUNT(*)FROMUsersWHEREusername='admin'andpassword='p@$$w0rd'登录成功!SQLInjection:字符串参数/login.asp管8程序员未预料到的结果……Username:admin'OR1=1--Password:1SELECTCOUNT(*)FROMUsersWHEREusername='admin'OR1=1--

'andpassword='1'SQLInjection:字符串参数/login.asp攻击者登录成功!‘是SQL字符串变量的定界符攻击关键通过定界符成功地将攻击者的意图注入到SQL语句中!通过注释保证SQL语句正确!--是MSSQL的注释符程序员未预料到的结果……SQLInjection:字符串9第4章注入攻击课件10后台代码后台代码11SELECT*fromUsersWHERElogin='ZAP'or'1'='1'--ANDpassword='*'SELECT*fromUsersWHERElogin='ZAP'or'1'='1'ANDpassword='ZAP'or'1'='1'2’or‘1尝试万能密码,能否登陆,Why?参考:实验平台:注入技术--SQL注入原理万能密码注入最后得到的SQL命令变成SELECT*fromUsersWHERElogi12SQLInjection:字符型注入字符型例句如下:

select*fromtablewhereusername=‘admin’andpassword=‘password’字符型注入最关键的是如何闭合sql语句以及注释多余的代码。例:输入:adminor1=1,则无法进行注入。因为adminor1=1会被数据库当作查询的字符串,SQL语句如下:select*fromtablewhereusername=‘adminor1=1’andpassword=‘password’这时要想进行注入则必须注意字符串的闭合问题。如果输入admin‘or1=1--,就可以继续注入,SQL语句如下:select*fromtablewhereusername=‘admin’or1=1--’andpassword=‘password’SQLInjection:字符型注入字符型例句如下:13实践练习&作业1、实验平台:注入技术--SQL注入原理万能密码注入。理解:万能密码的原理。2、Sql注入练习平台3、http要求:登陆成功。实践练习&作业1、实验平台:注入技术--SQL注入原理万能密14注入——SQL注入二、原理1、字符型SQL注入对于字符型SQL注入手法其参数为字符型的,我们根据这种情形把对该种参数进行SQL注入的手法叫字符型SQL注入。通常的注入手法是在参数后面加‘or‘‘=’这样的的保证查询语句为真的手法。注入——SQL注入二、原理15SQL注入攻击的本质

SQL注入攻击的本质是把用户输入的数据当做代码执行。这里有两个关键条件,第一个是用户能够控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。即:用户提交的参数未做充分的检查、过滤,即被带进sql命令中,改变了原有Sql命令的语义,并且被数据库成功的执行。SQL注入攻击的本质SQL注入攻击的本质是把用户输入16注入——SQL注入二、原理2、数字型SQL注入对于数字型SQL注入手法其参数为数字型的,我们根据这种情形把对该种参数进行SQL注入的手法叫数字型SQL注入。通常的注入手法是在参数后面加“or1=1”这样的的保证查询语句为真的手法。注入——SQL注入二、原理17第4章注入攻击课件18识别数据库

要想发动SQL注入攻击,就要知道正在使用的系统数据库,不然就没法提取重要的数据。

首先从Web应用技术上就给我们提供了判断的线索:

ASP和.NET:MicrosoftSQLServerPHP:MySQL、PostgreSQLJava:Oracle、MySQL

底层操作系统也给我们提供了线索,比如安装IIS作为服务器平台,后台数据及很有可能是MicrosoftSQLServer,而允许Apache和PHP的Linux服务器就很有可能使用开源的数据库,比如MySQL和PostgreSQL。识别数据库

19基于错误识别数据库大多数情况下,要了解后台是什么数据库,只需要看一条详细的错误信息即可。比如判断我们事例中使用的数据库,我们加个单引号。从错误信息中,可以发现是MySQL。上面错误信息可以发现是MicrosoftSQLServer,如果错误信息开头是ORA,就可以判断数据库是Oracle。第4章注入攻击课件20/8/index.php?id=1/8/in21第4章注入攻击课件22注入——SQL注入经典SQL注入语句:1、判断有无注入点单引号

and1=1and1=22、猜表名(一般的表的名称无非是adminadminuseruserpasspassword等)and(Selectcount(*)from表名)<>0andexists(select*from表名)3、猜列名and(Selectcount(列名)from表名)<>0andexists(select列名from表名)实验:/experiment-course/experiment-course/vid/1648,实验参考:第1节SQL注入原理-手工注入access数据库注入——SQL注入经典SQL注入语句:23注入——SQL注入4、猜字段的长度(selecttop1len(username)fromAdmin)>05、猜用户名、密码的ASCII码(selecttop1asc(mid(username,1,1))fromAdmin)>0直到>m不成立时,就得出所猜解字符的ASCII码值。取第2个字符的ASCII码(selecttop1asc(mid(username,2,1))fromAdmin)>0注入——SQL注入4、猜字段的长度24第4章注入攻击课件25第4章注入攻击课件26注入——SQL注入6、orderby子句orderby:为select查询的列排序。例:selectid,username,passwordfromuserswhereid=1执行正常。selectid,username,passwordfromuserswhereid=1orderby1执行正常。selectid,username,passwordfromuserswhereid=1orderby4抛出异常。由此,攻击者也得知了当前sql语句有几列存在。在Oracle\MySql数据库中同样适用此语句。在得知列数后,攻击者通常会配合union,联合查询,进行下一步的攻击。/experiment-course/experiment-course/vid/1649实验:第2SQL注入原理-手工联合查询注入技术注入——SQL注入6、orderby子句27注入——SQL注入7、unionselect查询Union关键字将两个或更多个查询结果组合为单个结果,俗称联合查询,大部分数据库都支持union查询,如:Oracle\MySql\sqlserver\DB2等。下面列出了使用union合并两个查询结果集的基本原则。所有查询中的列数必须相同。数据类型必须兼容。Unionselectnull,null,null,null,null,null,null,null,null,null,nullfromadminUnionselect1,null,null,null,null,null,null,null,null,null,nullfromadmin注入——SQL注入7、unionselect查询28注入——SQL注入8、SQL注入

工具明小子啊DSqlmap实验地址:/experiment-course/experiment-course/vid/2088Pangolin:参考教材上的实验完成。注入——SQL注入8、SQL注入工具29注入——SQL注入—DVWA平台DVWA(DamVulnerableWebApplication)DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞。DVWA安装和使用指南/taiji007/1738532注入——SQL注入—DVWA平台DVWA(Dam30SQL注入存在的位置只要应用程序涉及到数据库查询的位置,都有SQL注入存在的隐患。而如果查询参数,需要用户参与,则这些位置,就是注入漏洞经常被利用的地方。常见与如下地方:1、表单2、下拉列表3、附带查询参数的URL中SQL注入存在的位置只要应用程序涉及到数据库31SQL注入过程SQL注入过程32SQL注入的危害SQL注入的危害33SQL注入的危害SQL注入的危害34第4章注入攻击课件35SQL注入的防御SQL注入攻击的问题最终归结于用户可以控制输入,验证了一句老话:有输入的地方,就可能存在风险。想要更好地防止SQL注入攻击,就必须清楚一个概念:数据库只负责执行SQL语句,根据SQL语句来返回数据。数据库并没有什么好的办法直接过滤SQL注入。知道此点后,我们应该明白防御SQL注入,还得从代码入手。SQL注入的防御SQL注入攻击的问题最终归结于用户可36SQL注入的防御1、严格的数据类型Java、C#等强类型语言几乎可以完全忽略数字型注入。像ASP、PHP这类语言会根据参数自动推导出数据类型,这一特点在弱类型语言中是相当不安全的。防御数字型注入相对来说是比较简单的,只需要在程序中严格判断数据类型即可。SQL注入的防御1、严格的数据类型37SQL注入的防御例:PHPSQL注入的防御例:PHP38SQL注入的防御2、特殊字符转义通过加强数据类型验证可以解决数字型的SQL注入,字符型却不可以,最好的办法就是对特殊字符进行转义。比如:单引号‘,如果用户输入的有’,根据相应的数据库进行转义。如:mysql使用”\”进行转义。例:用户输入:admin’or1=1转义后:admin\’or1=1SQL注入的防御2、特殊字符转义39SQL注入的防御

虽然$id经过了mysql_real_escape_string转义了’,可是因为后面的SQL语句$id没有单引号保护,会被系统认为是数值型,导致数值型注入$id

=intval

($id);加上,即可以防止字符型、数字型的注入了。

MediumSQL注入的防御虽然$id经过了mysql_real40SQL注入的防御mysql_real_escape_string()函数转义SQL语句中使用的字符串中的特殊字符。但是,mysql_real_escape_string()仅仅会转义:‘“等几个字符。那是不是再增加一些过滤字符就可以了呢?比如包括空格、括号、以及一些SQL的保留字,select、insert等。其实,这种基于黑名单的方法,都或多或少地存在一些问题。只需要将攻击字符转换一下编码格式即可绕过该防护函数,比如使用URL编码。SQL注入的防御mysql_real_escape_stri41SQL注入的防御HighSQL注入的防御High42SQL注入的防御3、框架技术Java、C#、PHP等语言都有自己的框架,这些框架技术越来越成熟、强大,而且也具有较高的安全性。SQL注入的防御3、框架技术43SQL注入的防御需求分析设计实现测试安全需求工程设计安全发布安全编码补丁管理配置加固软件黑盒测试渗透性测试代码安全审计安全软件开发生命周期依然是Web安全的基石。编码阶段:安全编码规范(输入验证、遵循安全SQL编码规范)测试阶段:代码审计、SQL注入测试等,可手工也可以结合自动工具部署阶段:数据库安全加固、Web应用防火墙、IDS/IPSSQL注入的防御需求分析设计实现测试安全需求工程设计安全发布44注入——命令注入实验地址实验平台---Web安全技术---注入技术---DVWA之命令注入/experiment-course/experiment-course/vid/1646完成实验后,完成http:///osrun/whois.php手工命令注入注入——命令注入实验地址45注入——命令注入概述原理实例演示防御注入——命令注入概述46注入——命令注入一、概述注入——命令注入一、概述47注入——命令注入一、概述注入——命令注入一、概述48注入——命令注入一、概述产生原因:任何脚本语言都可以调用操作系统命令,而各个脚本语言的实现方式都不一样,以PHIP和Java两种程序语言为例。当程序开发人员明白了这些函数存在的问题后,才能做到安全开发。注入——命令注入一、概述49第4章注入攻击课件50注入——命令注入一、概述命令注入有以下两种类型:1、通过参数注入应用程序执行一个自己控制的固定程序,通过用户输入的参数来执行命令。这时,可以通过参数的分隔符,在参数中注入命令,来执行攻击者想要运行的命令。注入——命令注入一、概述51注入——命令注入一、概述例1:通过参数注入(下面是一段PHP代码)$username=$_POST[“user”];$command=‘ls–l/home/’.$username;System($command);如果用户没有做输入验证,一个恶意的用户输入$username如下:;rm–rf/那么$command的结果为:ls–l/home/;rm–rf/由于分号;在Linux下是命令的分隔符,系统会首先执行ls命令,然后执行rm命令,删除整个系统文件。注入——命令注入一、概述52注入——命令注入2、应用程序将输入的整个字符串作为一个命令,应用程序只是做个中转,将命令传给操作系统执行。例如,通过exec来执行命令,这时,可以通过命令分隔符注入命令。例2:DVWA中的实验:&&netuser实验地址:/experiment-course/experiment-course/vid/1817注入——命令注入2、应用程序将输入的整个字符串作为一53注入——命令注入一、概述例2:DVWA中的实验:&&netuser一般系统的命令分隔符有:分号;、

&&、&、||、|,它们的区别如下表所示。注入——命令注入一、概述54合天网实验合天网实验55注入——命令注入二、利用漏洞&netuserdemo123456/add,netuserdemo,查看账户的基本信息。netlocalgroupAdministratorsdemo/add

,提升到管理员组的账户。netuserdemo/del,可以删除这个账户。注入——命令注入二、利用漏洞56注入——命令注入二、检测漏洞系统命令注入漏洞自动化测试工具–CommixCommix是一个适用于web开发者、渗透测试人员及安全研究者的自动化测试工具,可以帮助他们更高效的发现web应用中的命令注入攻击相关漏洞。Commix由Python编写。注入——命令注入二、检测漏洞57注入——命令注入二、检测漏洞注入——命令注入二、检测漏洞58注入——命令注入三、防御如果能够通过输入检查的方法避免命令行注入,则可以通过输入检查,对于如分号;>/<以及空格等这些有特殊意义的字符,可以实现过滤。但是这种使用黑名单的方法,往往很难彻底避免问题,因为有可能某些特殊字符会被遗漏。

如果只允许使用有限的命令,使用白名单方式过滤。注入——命令注入三、防御59注入——命令注入三、防御注入——命令注入三、防御60注入——命令注入三、防御注入——命令注入三、防御61第4章注入攻击第4章注入攻击62第4章注入攻击课件63A1-注入攻击注入攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者访问未被授权的数据。常见注入攻击漏洞,如SQL,OS命令注入。A1-注入攻击注入攻击发生在当不可信的数据作为命令或者查询语64注入攻击-SQL注入概述原理字符型SQL注入数字型SQL注入实例演示防御注入攻击-SQL注入概述65注入——SQL注入预备知识SQL语言结构化查询语言(StructuredQueryLanguage)简称SQL:是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。注入——SQL注入预备知识66注入——SQL注入常见SQL语句选择:select*fromtable1where范围

插入:insertintotable1(field1,field2)values(value1,value2)

删除:deletefromtable1where范围

更新:updatetable1setfield1=value1where范围

查找:select*fromtable1wherefield1like’%value1%’---like的语法很精妙,查资料!1=1,1=2的使用,在SQL语句组合时用的较多“where1=1”是表示选择全部

“where1=2”全部不选链接资源:/yubinfeng/archive/2010/11/02/1867386.html注入——SQL注入常见SQL语句67注入——SQL注入一、概述1、SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,从而得到黑客所需的信息。2、当应用程序使用输入内容来构造动态SQL语句以访问数据库时,或者使用包含未筛选的用户输入的字符串来传递的存储过程都有可能发生SQL注入。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得更严重。注入——SQL注入一、概述68SQLInjection:字符串参数/login.asp管理员管理员程序员考虑的场景:Username:adminPassword:p@$$w0rdSELECTCOUNT(*)FROMUsersWHEREusername='admin'andpassword='p@$$w0rd'登录成功!SQLInjection:字符串参数/login.asp管69程序员未预料到的结果……Username:admin'OR1=1--Password:1SELECTCOUNT(*)FROMUsersWHEREusername='admin'OR1=1--

'andpassword='1'SQLInjection:字符串参数/login.asp攻击者登录成功!‘是SQL字符串变量的定界符攻击关键通过定界符成功地将攻击者的意图注入到SQL语句中!通过注释保证SQL语句正确!--是MSSQL的注释符程序员未预料到的结果……SQLInjection:字符串70第4章注入攻击课件71后台代码后台代码72SELECT*fromUsersWHERElogin='ZAP'or'1'='1'--ANDpassword='*'SELECT*fromUsersWHERElogin='ZAP'or'1'='1'ANDpassword='ZAP'or'1'='1'2’or‘1尝试万能密码,能否登陆,Why?参考:实验平台:注入技术--SQL注入原理万能密码注入最后得到的SQL命令变成SELECT*fromUsersWHERElogi73SQLInjection:字符型注入字符型例句如下:

select*fromtablewhereusername=‘admin’andpassword=‘password’字符型注入最关键的是如何闭合sql语句以及注释多余的代码。例:输入:adminor1=1,则无法进行注入。因为adminor1=1会被数据库当作查询的字符串,SQL语句如下:select*fromtablewhereusername=‘adminor1=1’andpassword=‘password’这时要想进行注入则必须注意字符串的闭合问题。如果输入admin‘or1=1--,就可以继续注入,SQL语句如下:select*fromtablewhereusername=‘admin’or1=1--’andpassword=‘password’SQLInjection:字符型注入字符型例句如下:74实践练习&作业1、实验平台:注入技术--SQL注入原理万能密码注入。理解:万能密码的原理。2、Sql注入练习平台3、http要求:登陆成功。实践练习&作业1、实验平台:注入技术--SQL注入原理万能密75注入——SQL注入二、原理1、字符型SQL注入对于字符型SQL注入手法其参数为字符型的,我们根据这种情形把对该种参数进行SQL注入的手法叫字符型SQL注入。通常的注入手法是在参数后面加‘or‘‘=’这样的的保证查询语句为真的手法。注入——SQL注入二、原理76SQL注入攻击的本质

SQL注入攻击的本质是把用户输入的数据当做代码执行。这里有两个关键条件,第一个是用户能够控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。即:用户提交的参数未做充分的检查、过滤,即被带进sql命令中,改变了原有Sql命令的语义,并且被数据库成功的执行。SQL注入攻击的本质SQL注入攻击的本质是把用户输入77注入——SQL注入二、原理2、数字型SQL注入对于数字型SQL注入手法其参数为数字型的,我们根据这种情形把对该种参数进行SQL注入的手法叫数字型SQL注入。通常的注入手法是在参数后面加“or1=1”这样的的保证查询语句为真的手法。注入——SQL注入二、原理78第4章注入攻击课件79识别数据库

要想发动SQL注入攻击,就要知道正在使用的系统数据库,不然就没法提取重要的数据。

首先从Web应用技术上就给我们提供了判断的线索:

ASP和.NET:MicrosoftSQLServerPHP:MySQL、PostgreSQLJava:Oracle、MySQL

底层操作系统也给我们提供了线索,比如安装IIS作为服务器平台,后台数据及很有可能是MicrosoftSQLServer,而允许Apache和PHP的Linux服务器就很有可能使用开源的数据库,比如MySQL和PostgreSQL。识别数据库

80基于错误识别数据库大多数情况下,要了解后台是什么数据库,只需要看一条详细的错误信息即可。比如判断我们事例中使用的数据库,我们加个单引号。从错误信息中,可以发现是MySQL。上面错误信息可以发现是MicrosoftSQLServer,如果错误信息开头是ORA,就可以判断数据库是Oracle。第4章注入攻击课件81/8/index.php?id=1/8/in82第4章注入攻击课件83注入——SQL注入经典SQL注入语句:1、判断有无注入点单引号

and1=1and1=22、猜表名(一般的表的名称无非是adminadminuseruserpasspassword等)and(Selectcount(*)from表名)<>0andexists(select*from表名)3、猜列名and(Selectcount(列名)from表名)<>0andexists(select列名from表名)实验:/experiment-course/experiment-course/vid/1648,实验参考:第1节SQL注入原理-手工注入access数据库注入——SQL注入经典SQL注入语句:84注入——SQL注入4、猜字段的长度(selecttop1len(username)fromAdmin)>05、猜用户名、密码的ASCII码(selecttop1asc(mid(username,1,1))fromAdmin)>0直到>m不成立时,就得出所猜解字符的ASCII码值。取第2个字符的ASCII码(selecttop1asc(mid(username,2,1))fromAdmin)>0注入——SQL注入4、猜字段的长度85第4章注入攻击课件86第4章注入攻击课件87注入——SQL注入6、orderby子句orderby:为select查询的列排序。例:selectid,username,passwordfromuserswhereid=1执行正常。selectid,username,passwordfromuserswhereid=1orderby1执行正常。selectid,username,passwordfromuserswhereid=1orderby4抛出异常。由此,攻击者也得知了当前sql语句有几列存在。在Oracle\MySql数据库中同样适用此语句。在得知列数后,攻击者通常会配合union,联合查询,进行下一步的攻击。/experiment-course/experiment-course/vid/1649实验:第2SQL注入原理-手工联合查询注入技术注入——SQL注入6、orderby子句88注入——SQL注入7、unionselect查询Union关键字将两个或更多个查询结果组合为单个结果,俗称联合查询,大部分数据库都支持union查询,如:Oracle\MySql\sqlserver\DB2等。下面列出了使用union合并两个查询结果集的基本原则。所有查询中的列数必须相同。数据类型必须兼容。Unionselectnull,null,null,null,null,null,null,null,null,null,nullfromadminUnionselect1,null,null,null,null,null,null,null,null,null,nullfromadmin注入——SQL注入7、unionselect查询89注入——SQL注入8、SQL注入

工具明小子啊DSqlmap实验地址:/experiment-course/experiment-course/vid/2088Pangolin:参考教材上的实验完成。注入——SQL注入8、SQL注入工具90注入——SQL注入—DVWA平台DVWA(DamVulnerableWebApplication)DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞。DVWA安装和使用指南/taiji007/1738532注入——SQL注入—DVWA平台DVWA(Dam91SQL注入存在的位置只要应用程序涉及到数据库查询的位置,都有SQL注入存在的隐患。而如果查询参数,需要用户参与,则这些位置,就是注入漏洞经常被利用的地方。常见与如下地方:1、表单2、下拉列表3、附带查询参数的URL中SQL注入存在的位置只要应用程序涉及到数据库92SQL注入过程SQL注入过程93SQL注入的危害SQL注入的危害94SQL注入的危害SQL注入的危害95第4章注入攻击课件96SQL注入的防御SQL注入攻击的问题最终归结于用户可以控制输入,验证了一句老话:有输入的地方,就可能存在风险。想要更好地防止SQL注入攻击,就必须清楚一个概念:数据库只负责执行SQL语句,根据SQL语句来返回数据。数据库并没有什么好的办法直接过滤SQL注入。知道此点后,我们应该明白防御SQL注入,还得从代码入手。SQL注入的防御SQL注入攻击的问题最终归结于用户可97SQL注入的防御1、严格的数据类型Java、C#等强类型语言几乎可以完全忽略数字型注入。像ASP、PHP这类语言会根据参数自动推导出数据类型,这一特点在弱类型语言中是相当不安全的。防御数字型注入相对来说是比较简单的,只需要在程序中严格判断数据类型即可。SQL注入的防御1、严格的数据类型98SQL注入的防御例:PHPSQL注入的防御例:PHP99SQL注入的防御2、特殊字符转义通过加强数据类型验证可以解决数字型的SQL注入,字符型却不可以,最好的办法就是对特殊字符进行转义。比如:单引号‘,如果用户输入的有’,根据相应的数据库进行转义。如:mysql使用”\”进行转义。例:用户输入:admin’or1=1转义后:admin\’or1=1SQL注入的防御2、特殊字符转义100SQL注入的防御

虽然$id经过了mysql_real_escape_string转义了’,可是因为后面的SQL语句$id没有单引号保护,会被系统认为是数值型,导致数值型注入$id

=intval

($id);加上,即可以防止字符型、数字型的注入了。

MediumSQL注入的防御虽然$id经过了mysql_real101SQL注入的防御mysql_real_escape_string()函数转义SQL语句中使用的字符串中的特殊字符。但是,mysql_real_escape_string()仅仅会转义:‘“等几个字符。那是不是再增加一些过滤字符就可以了呢?比如包括空格、括号、以及一些SQL的保留字,select、insert等。其实,这种基于黑名单的方法,都或多或少地存在一些问题。只需要将攻击字符转换一下编码格式即可绕过该防护函数,比如使用URL编码。SQL注入的防御mysql_real_escape_stri102SQL注入的防御HighSQL注入的防御High103SQL注入的防御3、框架技术Java、C#、PHP等语言都有自己的框架,这些框架技术越来越成熟、强大,而且也具有较高的安全性。SQL注入的防御3、框架技术104SQL注入的防御需求分析设计实现测试安全需求工程设计安全发布安全编码补丁管理配置加固软件黑盒测试渗透性测试代码安全审计安全软件开发生命周期依然是Web安全的基石。编码阶段:安全编码规范(输入验证、遵循安全SQL编码规范)测试阶段:代码审计、SQL注入测试等,可手工也可以结合自动工具部署阶段:数据库安全加固、Web应用防火墙、IDS/IPSSQL注入的防御需求分析设计实现测试安全需求工程设计安全发布105注入——命令注入实验地址实验平台---Web安全技术---注入技术---DVWA之命令注入/exper

温馨提示

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

评论

0/150

提交评论