大多的PHP程序,都有这样的逻辑:
如果发现php.ini配置为不给GPC变量自动添加转义斜线,则PHP自动为GPC添加转义斜线
但是事实上,这是错误的,因为它改变了GPC变量原来的值.
有这个遗留习惯的原因是PHP程序使用往往配合mysql, 而mysql对特殊字符的转义,采取的是添加转义斜线,但是其它数据如mssql,oci呢,不一定是这样的.
如果使用其它类型数据库,如mssql,oci,sybase 那么,给GPC添加转义斜线,更是个错误
进一步,如果GPC数据不需要存入数据库,而保存到文件系统,或转发给其它程序呢?更是很严重的错误逻辑.
所以,正确的做法是:
1.PHP程序入口去掉转义斜线(若php.ini配置为自动添加转义斜线)
2.在写入mysql时,使用mysql_real_escape_string而不是addcslashes来转义变量
因为前者比后者更为安全(字符集相关的)
db类中已考虑到这个问题,详情参阅db_mysql.class.php,搜寻mysql_real_escape_string
目前有以下案例:
积分商城的php.ini配置为自动添加转义斜线,用户提交的数据写入cookie时,需要及时去掉斜线
discuz 6.0的论坛,特殊用户名中的"頫"经过addcslashes处理后,竟然变成"頫\",后面多了一个斜线,这是discuz 6的一个bug.
那么,综述一下:
1.针对系统管理员,应该配置php.ini
magic_quotes_gpc=Off
magic_quotes_runtime=Off
magic_quotes_sybase=Off
针对php开发人员,更准确的逻辑:
1.检查php环境是否配置为自动添加转义斜线,若是,应该调用stripslashes去掉$_REQUEST, $_GET,$_POST,$_COOKIE的转义斜线
2.查询/写入/修改数据至mysql时,再使用mysql_real_escape_string转义之
分享到:
相关推荐
假设我们有一个表单提交数据,需要判断是否启用了Magic Quotes GPC,并根据结果决定是否需要对数据进行额外的转义处理。 ```php <?php // 检查是否启用了 Magic Quotes GPC if (!get_magic_quotes_gpc()) { // ...
在PHP编程语言中,`get_magic_quotes_gpc()`是一个非常重要的函数,主要用于处理用户通过GET、POST或COOKIE方式提交的数据。这个函数的核心作用是检查PHP的配置选项`magic_quotes_gpc`的状态,该选项决定了PHP是否会...
magic_quotes_gpc与magic_quotes_runtime是PHP语言中用于自动转义特殊字符的两个配置指令,它们的主要目的是为了防止SQL注入等安全问题。这两个指令对于处理用户输入的数据,尤其是从GET、POST、COOKIE等超全局变量...
综上所述,magic_quotes_gpc是一个重要的安全设置,它能够帮助开发者自动处理输入数据的安全性问题。然而,由于它可能会对数据的输出造成影响,因此开发者需要根据实际的配置情况灵活应对,正确使用addslashes()和...
magic_quotes_gpc是PHP中的一个配置指令,它涉及到了PHP中数据处理的一些重要知识,特别是在处理输入数据时的自动转义功能。在进行网站开发,尤其是文章发布系统时,数据的输入和输出处理是一个重要方面。了解magic_...
PHP魔术引号实现在PHP 5.4更高版本上为旧版代码实现magic_quotes_gpc 如果您要将旧版源代码迁移到上述PHP 5.4版的环境中,但是根据Magic Quotes magic_quotes_gpc SQL保护,其中包括许多易受攻击的数据库查询代码。...
php $magic_quotes_gpc = get_magic_quotes_gpc(); @extract(daddslashes($_COOKIE)); @extract(daddslashes($_POST)); @extract(daddslashes($_GET)); if(!$magic_quotes_gpc) { $_FILES = daddslashes($_FILES); }...
为了避免这种情况,可以在程序开始时检测magic_quotes_gpc的状态,并根据其设置决定是否需要手动处理转义。如果服务器的magic_quotes_gpc设置为关闭,可以在必要时使用set_magic_quotes_runtime(0)关闭自动转义功能...
主要介绍了php中magic_quotes_gpc对unserialize的影响,以实例的形式分析了magic_quotes_gpc安全过滤对unserialize造成的影响以及对此的解决方法,非常具有实用价值,需要的朋友可以参考下
php中数据的魔法引用函数 magic_quotes_gpc 或 magic_quotes_runtime 设置为on时,为我们引用的数据碰到 单引号’ 和 双引号” 以及 反斜线\ 时自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行两者...
特地查看了下手册,关于php magic quotes,常见的几个设置如下,magic_quotes_gpc,magic_quotes_sybase,magic_quote_runtime,这几个函数是在php.ini中去配置的,从手册中可以看出从php5.3后已经废除了这些特性,...
在PHP中,`magic_quotes_gpc`是早期用来防御SQL注入的一种机制,但现在已经不再推荐使用。 `magic_quotes_gpc`是PHP的一个配置选项,当设置为`on`时,它会在请求开始时自动对GET、POST和COOKIE数据添加反斜杠(\)...
中开启magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc可以把get,post,cookie里的引号变为斜杠。magic_quotes_runtime对于进出数据库的数据可以起到格式话的作用。其实,早在以前注入很疯狂时,这个参数...