get_magic_quotes_gpc() 转义技巧

get_magic_quotes_gpc()

 

这个应该算是个常识性问题了,php5.4之前这个函数返回默认值是 1,之后就0了,也就是说php5.4之后,php不会给你传递的$_GET、$_POST、$_COOKIE、$_REQUEST变量自动转义了。

这里的转义意思是主要是:反斜线(\)、单引号(’)、双引号(”)、NUL(这个我没复现过,估计用js可以实现吧)

 

Note:

如果 magic_quotes_sybase 也是 ON,它会完全覆盖 magic_quotes_gpc。 两个指令都启用意味着只有单引号被转义为 。 双引号、反斜杠和 NUL’s 不会被转义。 如果启用了magic_quotes_sybase单引号会被单引号转义而不是反斜线

 

所以,如果需要对所有的字符字符进行过滤的话,有个好办法:

 

<?php
/**
 * This setting was removed in PHP 5.4, but get_magic_quotes_gpc
 * always returns False since then.
 * 自动给加转义
 */
define( 'QUOTES_GPC', get_magic_quotes_gpc() );
define( 'QUOTES_SYBASE', ini_get( 'magic_quotes_sybase' ) );
if ( QUOTES_GPC && QUOTES_SYBASE || !QUOTES_GPC) {
 PMA_arrayWalkRecursive($_GET, 'addslashes', true);
 PMA_arrayWalkRecursive($_POST, 'addslashes', true);
 PMA_arrayWalkRecursive($_COOKIE, 'addslashes', true);
 PMA_arrayWalkRecursive($_REQUEST, 'addslashes', true);
}
echo $_GET['s'];
function PMA_arrayWalkRecursive(& $array, $function, $apply_to_keys_also = false)
{
 static $recursive_counter = 0;
 $walked_keys = array();
if (++$recursive_counter > 1000) {
 die('possible deep recursion attack');
 }
 foreach ($array as $key => $value) {
 if (isset($walked_keys[$key])) {
 continue;
 }
 $walked_keys[$key] = true;
if (is_array($value)) {
 PMA_arrayWalkRecursive($array[$key], $function, $apply_to_keys_also);
 } else {
 $array[$key] = $function($value);
 }
if ($apply_to_keys_also && is_string($key)) {
 $new_key = $function($key);
 if ($new_key != $key) {
 $array[$new_key] = $array[$key];
 unset($array[$key]);
 $walked_keys[$new_key] = true;
 }
 }
 }
 $recursive_counter--;
}

											
此条目发表在 php, 扒拉代码 分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>