知识大全 php防止sql注入的函数介绍

Posted 函数

篇首语:要让事情改变,先改变自己;要让事情变得更好,先让自己变得更强。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 php防止sql注入的函数介绍相关的知识,希望对你有一定的参考价值。

  具体用法

  addslashes防止SQL注入

  虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入 还是建议大家加强中文防止SQL注入的检查 addslashes的问题在 于黑客 可以用 xbf 来代替单引号 而addslashes只是将 xbf 修改为 xbf c 成为一个有效的多字节字符 其中的 xbf c仍会 被看作是单引号 所以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 = nl br($post); // 回车转换 $post= specialchars($post); // 标记转换 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# 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() 并不接受连接参数 也不管当前字符集设定

  例子 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这 个函数的区别

  mysql_real_escape_string 必须在(PHP >= PHP )的情况下才能使用 否则只能用 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版本有要求;

cha138/Article/program/PHP/201311/21094

相关参考