php中get_magic_quotes_gpc和get_magic_quotes_runtime 转义问题
在PHP中get_magic_quotes_gpc()函数是内置的函数,这个函数的作用就是得到php.ini设置中magic_quotes_gpc选项的值。
那么就先说一下magic_quotes_gpc选项:
如果magic_quotes_gpc=On,PHP解析器就会自动为post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。
在magic_quotes_gpc=On的情况下,如果输入的数据有
单引号(’)、双引号(”)、反斜线(\)与 NUL(NULL字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。
正是因为这个选项必须为On,但是又让用户进行配置的矛盾,在PHP6中删除了这个选项,一切的编程都需要在magic_quotes_gpc=Off下进行了。在这样的环境下如果不对用户的数据进行转义,后果不仅仅是程序错误而已了。同样的会引起数据库被注入攻击的危险。所以从现在开始大家都不要再依赖这个设置为On了,以免有一天你的服务器需要更新到PHP6而导致你的程序不能正常工作。
当magic_quotes_gpc=On的时候,函数get_magic_quotes_gpc()就会返回1
当magic_quotes_gpc=Off的时候,函数get_magic_quotes_gpc()就会返回0
因此可以看出这个get_magic_quotes_gpc()函数的作用就是得到环境变量magic_quotes_gpc的值。既然在PHP6中删除了magic_quotes_gpc这个选项,那么在PHP6中这个函数我想也已经不复存在了。
php中get_magic_quotes_gpc和get_magic_quotes_runtime 转义问题
get_magic_quotes_gpc会将Get/Post/Cookie中所有的 '(单引号), " (双引号), \ (反斜线) and 空字符加上反斜杠转义。
get_magic_quotes_runtime设置为on的时候会将数据库中取出来的 ' (单引号), " (双引号), \(反斜线)这些字符加上反斜杠转义。
get_magic_quotes_gpc并不能通过程序来关闭,get_magic_quotes_runtime可以通过程序来关闭,set_magic_quotes_runtime(0)并不就是关闭了魔法引用,Get/Post/Cookie中的数据还是会被转义的(如果gpc开着在的话),设置这个是取数据的时候强制关闭着,防止取出的时候被再次转义。
如果get_magic_quotes_gpc开着就不要在mysql_escape_string 或者mysql_real_escape_string或者addslashes了,防止多次转义,但是对于用户的输入转义是必须要使用的,无论你是addslashes还是mysql_escape_string还是get_magic_quotes_gpc自动处理甚至是使用str_replace或正则替换都行。但一次就够了,
魔法引用,两个比较模糊的函数,下面通过具体程序来了解下:
<?php
set_magic_quotes_runtime(1);
$conn = mysql_connect('localhost','root','123456');
mysql_select_db('test');
//浏览器带参数 输入 a'm
$a = $_GET['a'];
//关闭gpc输出a'm 开着gpc输出 a\'m
echo $a;
$a = mysql_escape_string($a);
//关闭gpc输出a\'m 开着gpc输出 a\\\'m 也就是在上面的基础上重新手动转换了一次
echo $a;
mysql_query("insert into test (`content`) values ('$a')") or die(mysql_error());
$query = mysql_query("select * from test ",$conn);
while ($row = mysql_fetch_assoc($query)) {
var_dump("<pre>",$row);
}
?>
在PHP中get_magic_quotes_gpc()函数是内置的函数,这个函数的作用就是得到php.ini设置中magic_quotes_gpc选项的值。
那么就先说一下magic_quotes_gpc选项:
如果magic_quotes_gpc=On,PHP解析器就会自动为post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。
在magic_quotes_gpc=On的情况下,如果输入的数据有
单引号(’)、双引号(”)、反斜线(\)与 NUL(NULL字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。
正是因为这个选项必须为On,但是又让用户进行配置的矛盾,在PHP6中删除了这个选项,一切的编程都需要在magic_quotes_gpc=Off下进行了。在这样的环境下如果不对用户的数据进行转义,后果不仅仅是程序错误而已了。同样的会引起数据库被注入攻击的危险。所以从现在开始大家都不要再依赖这个设置为On了,以免有一天你的服务器需要更新到PHP6而导致你的程序不能正常工作。
当magic_quotes_gpc=On的时候,函数get_magic_quotes_gpc()就会返回1
当magic_quotes_gpc=Off的时候,函数get_magic_quotes_gpc()就会返回0
因此可以看出这个get_magic_quotes_gpc()函数的作用就是得到环境变量magic_quotes_gpc的值。既然在PHP6中删除了magic_quotes_gpc这个选项,那么在PHP6中这个函数我想也已经不复存在了。
php中get_magic_quotes_gpc和get_magic_quotes_runtime 转义问题
get_magic_quotes_gpc会将Get/Post/Cookie中所有的 '(单引号), " (双引号), \ (反斜线) and 空字符加上反斜杠转义。
get_magic_quotes_runtime设置为on的时候会将数据库中取出来的 ' (单引号), " (双引号), \(反斜线)这些字符加上反斜杠转义。
get_magic_quotes_gpc并不能通过程序来关闭,get_magic_quotes_runtime可以通过程序来关闭,set_magic_quotes_runtime(0)并不就是关闭了魔法引用,Get/Post/Cookie中的数据还是会被转义的(如果gpc开着在的话),设置这个是取数据的时候强制关闭着,防止取出的时候被再次转义。
如果get_magic_quotes_gpc开着就不要在mysql_escape_string 或者mysql_real_escape_string或者addslashes了,防止多次转义,但是对于用户的输入转义是必须要使用的,无论你是addslashes还是mysql_escape_string还是get_magic_quotes_gpc自动处理甚至是使用str_replace或正则替换都行。但一次就够了,
魔法引用,两个比较模糊的函数,下面通过具体程序来了解下:
<?php
set_magic_quotes_runtime(1);
$conn = mysql_connect('localhost','root','123456');
mysql_select_db('test');
//浏览器带参数 输入 a'm
$a = $_GET['a'];
//关闭gpc输出a'm 开着gpc输出 a\'m
echo $a;
$a = mysql_escape_string($a);
//关闭gpc输出a\'m 开着gpc输出 a\\\'m 也就是在上面的基础上重新手动转换了一次
echo $a;
mysql_query("insert into test (`content`) values ('$a')") or die(mysql_error());
$query = mysql_query("select * from test ",$conn);
while ($row = mysql_fetch_assoc($query)) {
var_dump("<pre>",$row);
}
?>