Loving Coding & Visual Design

关于mysql_real_escape_string

今天有空看了看多用户博客lyceumWordPress MU。在WP-db.php有这样一段代码:

[code lang="php"]function escape($string) {
return addslashes( $string ); // Disable rest for now, causing problems
if( !$this->dbh || version_compare( phpversion(), '4.3.0' ) == '-1' )
return mysql_escape_string( $string );
else
return mysql_real_escape_string( $string, $this->dbh );
} [/code]

很好的说明了addslashes和mysql_real_escape_string的区别,虽然国内很多PHP coder仍在依靠addslashes防止SQL注入(包括我在内),我还是建议大家加强中文防止SQL注入的检查。

addslashes的问题在于黑客可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以addslashes无法成功拦截。

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

另外对于php手册中get_magic_quotes_gpc的举例:

[code lang="php"]if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} else {
$lastname = $_POST['lastname'];
}[/code]

最好对magic_quotes_gpc已经开放的情况下,还是对$_POST['lastname']进行检查一下。



下一页


最 近 文 章

  1. 想去韩国?先准备8万块 - Tue, 27 Nov 2007 13:45:28 +0000
  2. 厌倦了Javascript和HTML的混合写法?试试Behaviour - Thu, 22 Nov 2007 10:37:15 +0000
  3. Symfony - 基于PHP5的开源框架 - Tue, 20 Nov 2007 13:28:40 +0000
  4. 测试自己是左脑还是右脑型的人 - Wed, 24 Oct 2007 08:35:12 +0000
  5. 变得沉默了 - Sat, 20 Oct 2007 03:13:34 +0000
  6. 杭州、绍兴游 - Tue, 09 Oct 2007 05:22:34 +0000
  7. Windows下面php5找不到php_curl.dll的问题 - Thu, 27 Sep 2007 02:30:07 +0000
  8. Js Err: 'button[].type' is null or not an object - Fri, 14 Sep 2007 10:19:36 +0000
  9. 为Discuz增加关键字过滤的功能 - Thu, 13 Sep 2007 13:00:31 +0000
  10. CSS:IE下非链接HOVER的解决办法 - Wed, 12 Sep 2007 08:50:52 +0000