background image

一、对于 GPC,不管系统有没有开启 magic_quotes_gpc(即 php.ini 中 magic_quotes_gpc = 
On

 

),我们统一开启 magic_quotes_gpc,对 get、post、cookie 的内容进行转义。操作如下:

(摘自 uchome 系统)
代码如下:

function

 saddslashes(

$string

) { 

if

 (

is_array

(

$string

)) { 

foreach

 (

$string

 

as

 

$key

 => 

$val

) { 

$string

[

$key

] = saddslashes(

$val

); 


else

 { 

$string

 = 

addslashes

(

$string

); 

return

 

$string


 

//GPC

 

过滤

$magic_quote

 = get_magic_quotes_gpc(); 

if

(

empty

(

$magic_quote

)) { 

$_GET

 = saddslashes(

$_GET

); 

$_POST

 = saddslashes(

$_POST

); 


 

//COOKIE,给 cookie

 

值转义

$prelength

 = 

strlen

(

$_SC

['cookiepre']); 

foreach

 (

$_COOKIE

 

as

 

$key

 => 

$val

) { 

if

(

substr

(

$key

, 0, 

$prelength

) == 

$_SC

['cookiepre']) { 

$_SCOOKIE

[(

substr

(

$key

$prelength

))] = 

empty

(

$magic_quote

) ? saddslashes(

$val

) : 

$val


二、对于 magic_quotes_runtime,我们统一关闭它,即 set_magic_quotes_runtime(0);不让从
数据库读取出来的数据的单引号、双引号和反斜杠都自动被加上\。这样,对数据库的操作
如下:添加数据到数据库之前,我们手动对数据进行 addslashes(),而从数据库取出数据
时,则作相反操作,即 stripslashes()。

三、对于要序列化的内容,要保持裸数据,即要去掉转义,stripslashes(),然后在把序列
化过的内容保存到数据库当中(注意,序列化过的内容是不带单引号('

)、双引号( )、

反斜线(\)的),示例如下:
$feedarr['body_data'] = serialize(stripslashes($body_data));
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++