说到网站安全不得不提到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;
}
$_POST = array_map('stripslashes_deep', $_POST);

  去除magic_quotes_gpc的转义之后再使用addslashes函数,代码如下:
  PHP防范SQL注入的代码
  $keywords = addslashes($keywords);
  $keywords = str_replace("_","\_",$keywords);//转义掉”_”
  $keywords = str_replace("%","\%",$keywords);//转义掉”%”
  后两个str_replace替换转义目的是防止黑客转换SQL编码进行攻击。