一、对于 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));
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++