php mysql注入攻击解决方案

  首先说说sql注入攻击的模式,基本上都是后台在接受前端传递的参数的时候将sql代码或脚本代码混入到提交信息中,如果在接受提交的参数的时候没有做精确的数据验证,很可能就让别人钻了空子;轻则暴库,重则数据库数据都会被删;

  所以想要预防sql注入, 关键是程序员写的代码一定要严谨,对数据做严格的验证,数据类型,长度,正则等都可以做;

  http://hudeyong926.iteye.com/blog/703074这个里面验证规则可以参考;

  在做防止sql注入的时候需要按照你传入参数的类型进行过滤,理论上只要不符合你传递的参数类型的数据应该全部过滤掉,可以写多个函数封装起来,用到这个过滤就调用这个函数;这样灵活性更高;

1、正则表达式过滤sql关键字,这个一般在传参的时候肯定是不允许参数里面带这些数据的;

function inject_check($str1) {
//验证传入的参数中是否含有注入字符
return preg_match(‘/select|insert|and|or|update|delete|union|into|load_file|outfile|from|count\(|drop table|update|truncate|asc\(|mid\(|char\(|xp_cmdshell|exec|master|\/\*|\*|\.\.\/|\.\//i‘, $str1);
}

2、数据类型验证

数据了类型就比较好判断了, is_string()判断是否是字符串,is_numeric()判断是否是数字;这里需要注意一点,php是弱语言型编程语言,所以区分是否是数字和字串的时候需要注意一下,‘1‘和1其实是相等的, php会自动把数字型字串转换成数字,但是如果在‘1‘外面套上双引号如"‘1‘"这样,它就是字串了;在做过滤的时候切记, 不然很容易犯错;

3、数据长度验证

如果能确定你的传入数据的长度,当然可以做一个简单判断, 不过一般情况直接使用正则表达式判断, 不仅能匹配数据长度, 还能精确的匹配数据类型和参数格式等,所以正则表达式还是很方便高效的;

4、特殊字符替换

这个问题可能存在当用户输入‘,",%等的时候, sql误以为是特殊字符,执行的时候语句就报错或是查询的结果不对;这就需要str_replace()函数做字符串特定字符的替换,

比如str_resplace(‘‘‘,‘\‘‘,$str);,这样就会把$str中的‘号转成\‘;这样sql在执行的时候就会把‘当做‘去处理,不然会以为是字符串分界符;这样就会报错了,%其实也是一样,%在sql中是模糊查询,如果做了转义处理,sql就会认为是%这个字符,不做模糊查询处理;当然php也有函数去处理引号转义处理的,addslashes()函数就是做这个事情的,另外php配置文件中有一个magic_quotes_gpc()这个配置如果设置为on,则php在接受参数的时候, 会自动的给‘,",\,null加上\进行转义;具体详细使用方法我这里就不多说了, 前面的链接里面也是有的, 百度也很容易查到;

先就总结这几点吧 , 后面用到别的再加;

时间: 2024-10-09 02:58:23

php mysql注入攻击解决方案的相关文章

mysql注入攻击扫描备忘;

web服务器出现漏洞,很容易被人家扫描,并尝试注入mysql: 今天尝试着扫描一下真发现网站被注入测试了:贴一段代码: GET /?fbconnect_action=myhome&fbuserid=1+and+1=2+union+select+1,2,3,4,5,concat(user_login,0x3a,user_pass),7,8,9,10,11,12+from+wp_users-- HTTP/1.0" 301 184 "-" "Mozilla/5.0

PHP几个防SQL注入攻击自带函数区别

SQL注入攻击是黑客攻击网站最常用的手段.如果你的站点没有使用严格的用户输入检验,那么常容易遭到SQL注入攻击.SQL注入攻击通常通过给站点数据库提交不良的数据或查询语句来实现,很可能使数据库中的纪录遭到暴露,更改或被删除.为了防止SQL注入攻击,PHP自带一个功能可以对输入的字符串进行处理,可以在较底层对输入进行安全上的初步处理,也即Magic Quotes.(php.ini magic_quotes_gpc).如果magic_quotes_gpc选项启用,那么输入的字符串中的单引号,双引号和

2017-2018-2 20179204《网络攻防实践》第十一周学习总结 SQL注入攻击与实践

第1节 研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 1.1 原理 在计算机内部,输入数据通常被存放在一个临时空间内,这个临时存放的空间就被称为缓冲区,缓冲区的长度事先已经被程序或者操作系统定义好了.向缓冲区内填充数据,如果数据的长度很长,超过了缓冲区本身的容量,那么数据就会溢出存储空间,而这些溢出的数据还会覆盖在合法的数据上,这就是缓冲区和缓冲区溢出的道理. 参见这篇博客缓冲区溢出攻击 1.2 oracle数据库 针对Oracle数据库缓冲区溢出攻击的研究 1.3 mysql数据库

Web脚本攻击之注入攻击

注入攻击的概念和原理 注入漏洞是Web服务器中广泛存在的漏洞类型,其基本原理是Web程序对用户输入请求中包含的非法数据检查过滤不严,使Web程序将用户的异常输入字符当做正常代码执行,从而使用户在未授权的情况下非法获取Web服务器的信息. 利用注入漏洞发起的攻击称为注入攻击,它是Web安全领域最为常见威胁也是最大的攻击,注入攻击包括SQL注入.代码注入.命令注入.LDAP注入.XPath注入等.实现注入攻击要具备两个关键条件,第一是用户能够自主编写输入的数据,第二是Web程序的执行代码被拼接了用户

白帽子讲WEB安全 第七章 注入攻击

一.SQL注入: 1.注入攻击的本质:把用户输入的数据当代码执行. 攻击的关键点:1.用户能够控制输入: 2.原本程序要执行的代码, 2.盲注(Blind Injection):在服务器没有错误回显时完成的注入攻击. 3.时序攻击(Timing Attack):利用BENCHMARK()函数(mysql中用于测试函数性能的函数),可以让同一个函数执行若干次,使得结果返回的时间比平时要长:通过时间长短的变化,可以判断出注入语句是否执行成功.这是一种边信道攻击. 边信道攻击(side channel

使用SQLMAP对网站和数据库进行SQL注入攻击

from:http://www.blackmoreops.com/2014/05/07/use-sqlmap-sql-injection-hack-website-database/ 0x00 背景介绍 1. 什么是SQL注入? SQL注入是一种代码注入技术,过去常常用于攻击数据驱动性的应用,比如将恶意的SQL代码注入到特定字段用于实施拖库攻击等.SQL注入的成功必须借助应用程序的安全漏洞,例如用户输入没有经过正确地过滤(针对某些特定字符串)或者没有特别强调类型的时候,都容易造成异常地执行SQL

MySQL注入

SQL Injection Tutorial by Marezzi (MySQL) SQL注入教程由Marezzi(MySQL的) In this tutorial i will describe how sql injection works and how to在本教程中,我将介绍如何SQL注入工程和如何use it to get some useful information.用它来获取一些有用的信息. First of all: What is SQL injection?首先:什么是S

网络攻防之SQL注入攻击

SQL注入攻击的根源是因为SQL规范的漏洞,但是,因为规范的长期存在以及使用,几乎已经不太可能去修改规范了,只能够从开发者本身去避免攻击,虽然SQL注入之前很严重,但现在相对控制的很好,这里仅仅作为一种学习的内容. 测试过程如下: 1:搭建PHP,mysql开发环境,可以详见我的另一篇博客自定义开发PHP环境 2:添加数据库,表,以及表内容. 3:分别测试 万能密码,万能用户名 数字注入 测试如下: 万能密码:password ' or 1='1 (password可以任意的填写,注:这里如果粘

Web安全篇之SQL注入攻击

在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问题~ 大家早上好!今天由我给大家带来<web安全之SQL注入篇>系列晨讲,首先对课程进行简单介绍,SQL注入篇一共分为三讲:       第一讲:"纸上谈兵:我们需要在本地架设注入环境,构造注入语句,了解注入原理.":       第二讲:"实战演练:我们要在互联网上