当前位置:  编程技术>php

php防范sql注入方法与实例代码

    来源: 互联网  发布时间:2014-08-30

    本文导语:  php防范sql注入是一个非常重要的安全手段。 一个优秀的php程序员除了要能顺利的编写代码,还需要具备使程序处于安全环境下的能力。今天我们要向大家讲解的是有关php防范sql注入的相关方法。 说到网站安全就不得不提到sql...

php防范sql注入是一个非常重要的安全手段。

一个优秀的php程序员除了要能顺利的编写代码,还需要具备使程序处于安全环境下的能力。今天我们要向大家讲解的是有关php防范sql注入的相关方法。
说到网站安全就不得不提到sql注入(sql injection),如果你用过asp,对sql注入一定有比较深的理解,php的安全性相对较高,这是因为mysql4以下的版本不支持子语句,而且当php.ini里的 magic_quotes_gpc 为on 时。

提交的变量中所有的 ' (单引号), " (双引号), (反斜线) and 空字符会自动转为含有反斜线的转义字符,给sql注入带来不少的麻烦。
请看清楚:“麻烦”而已~这并不意味着php防范sql注入,书中就讲到了利用改变注入语句的编码来绕过转义的方法,比如将sql语句转成ascii编码(类似:char(100,58,92,108,111,99,97,108,104,111,115,116…)这样的格式),或者转成16进制编码,甚至还有其他形式的编码,这样以来,转义过滤便被绕过去了,那么怎样防范呢:

a. 打开magic_quotes_gpc或使用addslashes()函数
在新版本的php中,就算magic_quotes_gpc打开了,再使用addslashes()函数,也不会有冲突,但是为了更好的实现版本兼容,建议在使用转移函数前先检测magic_quotes_gpc状态,或者直接关掉,代码如下:
php防范sql注入的代码
 

代码示例:
// 去除转义字符  
function stripslashes_array($array) {  
if (is_array($array)) {  
foreach ($array as $k => $v) {  
$array[$k] = stripslashes_array($v);  
}  
} else if (is_string($array)) {  
$array = stripslashes($array);  
}  
return $array;  
}  
@set_magic_quotes_runtime(0);  
// 判断 magic_quotes_gpc 状态  
if (@get_magic_quotes_gpc()) {  
$_get = stripslashes_array($_get);  
$_post = stripslashes_array($_post);  
$_cookie = stripslashes_array($_cookie);  
}
 

去除magic_quotes_gpc的转义之后再使用addslashes函数,代码如下:
php防范sql注入的代码
 

代码示例:
$keywords = addslashes($keywords);
$keywords = str_replace("_","_",$keywords);//转义掉”_”
$keywords = str_replace("%","%",$keywords);//转义掉”%”
 

后两个str_replace替换转义目的是防止黑客转换sql编码进行攻击。

b. 强制字符格式(类型)
在很多时候我们要用到类似xxx.php?id=xxx这样的url,一般来说$id都是整型变量,为了防范攻击者把$id篡改成攻击语句,我们要尽量强制变量,代码如下:
php防范sql注入的代码
$id=intval($_get['id']);
当然,还有其他的变量类型,如果有必要的话尽量强制一下格式。

c. sql语句中包含变量加引号
这一点儿很简单,但也容易养成习惯,先来看看这两条sql语句:
 

代码示例:
select * from article where articleid='$id'
select * from article where articleid=$id

两种写法在各种程序中都很普遍,但安全性是不同的,第一句由于把变量$id放在一对单引号中,这样使得我们所提交的变量都变成了字符串,即使包含了正确的sql语句,也不会正常执行,而第二句不同,由于没有把变量放进单引号中,那我们所提交的一切,只要包含空格,那空格后的变量都会作为sql语句执行,因此,我们要养成给sql语句中变量加引号的习惯。

d.url伪静态化
url伪静态化也就是url重写技术,像discuz!一样,将所有的url都rewrite成类似xxx-xxx-x.html格式,既有利于seo,又达到了一定的安全性,也不失为一个好办法。但要想实现php防范sql注入,前提是你得有一定的“正则”基础。

您可能感兴趣的文章:
  • php过滤特殊字符sql防注入代码
  • php防SQL注入代码(360提供)
  • php防止SQL注入攻击与XSS攻击的方法
  • php防范SQL注入攻击与XSS攻击的方法详解
  • php防止SQL注入的方法分享
  • php防范sql注入的一些代码收集
  • php实现防注入与表单提交值转义的代码
  • php防止sql注入的方法解析
  • php 防注入的一段代码(过滤参数)
  • 学习php的防SQL注入函数:mysql_real_escape_string
  • 简明易懂的php sql防注入代码
  • php防止sql注入的代码
  • php实现sql防止注入的几种方法
  • 一个不错的php通用防注入程序
  • php防止sql注入正则过滤一例
  • php防止SQL注入的函数

    
 
 

您可能感兴趣的文章:

  • php防止sql注入代码实例
  • PHP MYSQL注入攻击需要预防7个要点
  • php is_numberic函数产生sql注入漏洞怎么解决
  • php过滤参数特殊字符防注入
  • php防SQL注入代码(360提供)
  • Discuz7.2版的faq.php SQL注入漏洞分析
  • PHP登录环节防止sql注入的方法浅析
  • PHP防范SQL注入的具体方法详解(测试通过)
  • php防止sql注入的代码示例
  • php中sql注入漏洞示例 sql注入漏洞修复
  • php防止sql注入函数(discuz)
  • php防止sql注入函数用法
  • php如何防范sql注入攻击 sql注入原理解析
  • php过滤特殊字符sql防注入代码
  • php sql注入攻击与防范注意事项
  • Python写的Discuz7.2版faq.php注入漏洞工具
  • php防止sql注入实例解析
  • PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
  • php session_id()函数介绍及代码实例
  • php 小数点取法实例总结
  • php生成透明背景图片实例
  • php逐字拆分字符串 php字符串拆分实例
  • php解析json数据实例
  • php定界符<<<使用技巧和实例
  • php读取sqlite数据库入门实例
  • PHP文件锁定写入实例解析
  • php读取mysql数据库入门实例
  • php生成excel列序号代码实例
  • PHP三元运算的2种写法代码实例
  • PHP接收二进制流并生成文件(实例)
  • php读取mysql入门实例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php cc攻击代码 cc攻击防范方法
  • PHP程序漏洞产生的原因分析与防范方法说明
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • php输入流php://input使用示例(php发送图片流到服务器)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • PHP转换器 HipHop for PHP
  • PHP去除html标签,php标记及css样式代码参考
  • PHP 框架 Pop php
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP的JavaScript框架 PHP.JS
  • php通过socket_bind()设置IP地址代码示例
  • php服务器探针显示php服务器信息
  • php安装完成后如何添加mysql扩展
  • PHP缓存加速器 Alternative PHP Cache (APC)
  • PHP的substr() 函数用法
  • PHP源文件加密工具 PHP Screw
  • php iis7站长之家
  • PHP自动化测试 PHP-QAT
  • php中操作memcache的类及成员列表及php下如何连接memched服务器
  • PHP 的 HTTP 客户端库 PHP Buzz
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • PHP 调试工具 PHP_Dyn


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3