php防止sql注入的函数介绍

   具体用法

  addslashes防止SQL注入

  虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入,还是建议大家加强中文防止SQL注入的检查。addslashes的问题在 于黑客 可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会 被看作是单引号,所以addslashes无法成功拦截。

  当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。

  另外对于php手册中get_magic_quotes_gpc的

  举例:

代码如下  

<?php
function post_check($post)
{
if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否为打开
{
$post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
}
$post = str_replace("_", "_", $post); // 把 '_'过滤掉
$post = str_replace("%", "%", $post); // 把' % '过滤掉
$post = nl2br($post); // 回车转换
$post= htmlspecialchars($post); // html标记转换
return $post;
}
?>

<?php
function inject_check($sql_str)
{
return eregi('select|insert|update|delete|'|
function verify_id($id=null)
{
if (!$id) { exit('没有提交参数!'); } // 是否为空判断
elseif (inject_check($id)) { exit('提交的参数非法!'); } // 注射判断
elseif (!is_numeric($id)) { exit('提交的参数非法!'); } // 数字判断
$id = intval($id); // 整型化
return $id;
}
?>

  string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )

  本函数将 unescaped_string 中的特殊字符转义,并计及连接的当前字符集,因此可以安全用于 mysql_query()。

  Note: mysql_real_escape_string() 并不转义 % 和 _。

  mysql_real_escape_string

  Example#1 mysql_real_escape_string() 例子

代码如下  

<?php
$item = "Zak's and Derick's Laptop" ;
$escaped_item = mysql_real_escape_string ( $item );
printf ( "Escaped string: %sn" , $escaped_item );
?>

以上例子将产生如下输出:

Escaped string: Zak's and Derick's Laptop

  mysql_escape_string

  本函数将 unescaped_string 转义,使之可以安全用于 mysql_query()。

  注: mysql_escape_string() 并不转义 % 和 _。

  本函数和 mysql_real_escape_string() 完全一样,除了 mysql_real_escape_string() 接受的是一个连接句柄并根据当前字符集转移字符串之外。mysql_escape_string() 并不接受连接参数,也不管当前字符集设定。

  例子 1. mysql_escape_string() 例子

代码如下  

<?php
$item = "Zak's Laptop";
$escaped_item = mysql_escape_string($item);
printf ("Escaped string: %sn", $escaped_item);
?>
输出:
Escaped string: Zak's Laptop

  mysql_real_escape_string和mysql_escape_string这2个函数的区别:

  mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。

  我们可以利用判断来综合处理

代码如下  
function cleanuserinput($dirty){
if (get_magic_quotes_gpc()) {
$clean = mysql_real_escape_string(stripslashes($dirty));
}else{
$clean = mysql_real_escape_string($dirty);
}
return $clean;
}

  总结一下:

  * addslashes() 是强行加;

  * mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求;

  * mysql_escape_string不考虑连接的当前字符集。

时间: 2024-09-10 17:42:38

php防止sql注入的函数介绍的相关文章

关于SQL注入防御函数

函数 刚刚在最爱白菜那里看到了一个SQL注入防御的函数,突然想起以前看到这些文章时的一直有个问题想不通的,我对于SQL注入的防御很简单,就以下两个函数: '####'##'## SQL注入攻击预防装置[字符型]'##'## @ data ->处理的数据'## @ length ->长度限制'##'## 例: strSql("SQL字符型数据",50)'##function strSql(data,length)'###############################

php自带的几个防止sql注入的函数

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

SQL注入常用函数

 有SQL语言基础的人,在SQL注入的时候成功率比不熟悉的人高很多.我们有必要提高一下自己的SQL水平,特别是一些常用的函数及命令. Access:asc(字符) SQLServer:unicode(字符) 作用:返回某字符的ASCII码 Access:chr(数字) SQLServer:nchar(数字) 作用:与asc相反,根据ASCII码返回字符 Access:mid(字符串,N,L) SQLServer:substring(字符串,N,L) 作用:返回字符串从N个字符起长度为L的子字符串

防止SQL注入的函数。

函数 作者:Loster(OICQ:181306) [如果转载,请勿删除此信息,谢谢] '函数名:S_Request() '辅助函数:R_Reader() '作用:过滤非法字符,防止SQL注入. '参数:S_Str:被传入的变量的名,类型:字符串 '返回值:过滤后的值. '*************************************************************************** Const C_SqlStr="',count,user,User,Cou

PHP漏洞之SQL注入攻击简单介绍

  SQL注入攻击的一般步骤: 1.攻 击者访问有SQL注入漏洞的站点,寻找注入点 2.攻击者构造注入语句,注入语句和程序中的SQL语句结合生成新的sql语句 3.新的sql语句被提交到数据库中执行 处理 4.数据库执行了新的SQL语句,引发SQL注入攻击   实例 数据库 CREATE TABLE `postmessage` ( `id` int(11) NOT NULL auto_increment, `subject` varchar(60) NOT NULL default ", `na

简单的js防止SQL注入的函数

SQL注入攻击的总体思路: 发现SQL注入位置:判断服务器类型和后台数据库类型:确定可执行情况 对于有些攻击者而言,一般会采取sql注入法.下面我也谈一下自己关于sql注入法的感悟. 注入法: 从理论上说,认证网页中会有型如: select * from admin where username='XXX' and password='YYY' 的语句,若在正式运行此句之前,如果没有进行必要的字符过滤,则很容易实施SQL注入. 如在用户名文本框内输入:abc' or 1=1– 在密码框内输入:1

自己了解php中sql注入一些方法介绍

何为注入? 比如我们在查询数据库的时候,我们通过文章的id号来取出这篇文章的所有信息.那么SQL语句可以这样写:  代码如下 复制代码 select * from blog where id=5  id的值通过用户的操作来传递,一般是GET方式,形如read.php?id=5.这样看起来是没有任何问题,但是如果我们稍微改下SQL语句:  代码如下 复制代码 select * from blog where id=5 or 1=1  1=1这个是恒等的,那么这条语句就会取出所有的文章.要修改这个只

关于SQL截取字符串函数介绍

A.截取从字符串左边开始N个字符  代码如下 复制代码    Declare @S1 varchar(100)    Select @S1='http://www.111cn.net'    Select Left(@S1,4)    ------------------------------------    显示结果: http    B.截取从字符串右边开始N个字符(例如取字符www.163.com)     代码如下 复制代码 Declare @S1 varchar(100)    S

php用户自定过滤非法sql注入字符串函数

 代码如下 复制代码 function uc_addslashes($string, $force = 0, $strip = false) {  !defined('magic_quotes_gpc') && define('magic_quotes_gpc', get_magic_quotes_gpc());  if(!magic_quotes_gpc || $force) {   if(is_array($string)) {    foreach($string as $key =