`

PHP中 Magic quotes

    博客分类:
  • PHP
 
阅读更多

 

什么是 Magic Quotes?

Magic Quotes 就是把用户输入的敏感字符自动进行转义的一个操作选项,它会根据需要对敏感字符进行转义。当 Magic Quotes 打开的时候,所有的'(单引号),"(双引号),\(反斜杠)和NULL字符都会被添加反斜杠进行转义,这样产生效果就相当于使用addslashes()函数。

 

一共有三个 magic quote 选项:

 

magic_quotes_gpc:作用于 HTTP 请求所发送的数据(GET, POST, COOKIE),运行时不能被改变,在 PHP 中默认值为on。 PHP函数 get_magic_quotes_gpc() 可以用来查看 magic_quotes_gpc 配置。返回1,则magic_quotes_gpc=on;返回0, magic_quotes_gpc=off。 magic_quotes_gpc 默认设置为on,这样PHP引擎自动的转义Get Post Cookie数据中的敏感字符,等价于手工调用addslashes()。主要是为了方便PHP初学者,以应对日益严重的sql注入攻击。但是设置为on 有性能上的缺点,另外有些情况下,我们不需要对特殊字符转义,设置为on反而是帮了倒忙。综合利弊,在实际应用中,应该设置 magic_quotes_gpc 为on。

 

magic_quotes_runtime:如果打开的话,大部份内部函数,包括数据库和文本文件,所返回的数据都会被反斜杠进行转义。该选项能在运行的时候被改变,在 PHP 中的默认值为off。 PHP函数set_magic_quotes_runtime(int new_setting),get_magic_quotes_runtime() 分别用来设置和获取magic_quotes_runtime选项值。 magic_quotes_runtime 应该在 php.ini 设置为off,在特殊情况下,可以手工调用set_magic_quotes_runtime(1) 打开选项。

 

magic_quotes_sysbase:如果打开的话,将会使用单引号对单引号进行转义而非反斜框。这时magic_quotes_gpc将会被忽略。换而言之,如果同时打开两个选项的话,单引号将会被转义成''。 而双引号、反斜杠、 NULL 字符将不会进行转义。 magic_qutoes_sysbase 应该在 php.ini 设置为off。

 

 

 

为什么使用 Magic quotes

 

方便快捷

PHP 的设计者在设计之初的构想就是能够快速方便的编程。例如插入数据库时,Magic quotes 会自动将数据转义,这很方便。

 

对初学者有利

Magic quotes 可以从一定程度上,让初学者带离脚本的安全风险。例如在没有任何保护措施的代码下,开启了 Magic quotes 后会少很多的风险,例如注入问题。当然,单一使用此方法,并不能完全阻止此类安全问题。

“我没有权限去关闭”

很显然你已经可能意识到了这个问题,但是主机空间并非完全由自己控制。

为什么不使用 Magic quotes

 

可移植性

无论此功能是否开启,它都会影响脚本的可移植性,因为它影响我们后续过滤数据的操作。

 

性能问题

在获取所有的外部数据之前都会被转义,这无疑会增加运行时的花销(而且并不是所有的数据都需要转义)。

 

造成困惑

 

正如上述所言,并非所有的数据都需要被转义。有可能出现的一种情况,就是当你为了获取未被转义的数据,而“疯狂的”使用 stripslashes 函数。

 

PHP6 已经不支持

PHP 的设计者显然已经意识到了自己的“错误”,所以在 PHP6 中已经将其废弃。

如何禁用 Magic quotes

按照本人观点,使用 php.ini 配置文件全局禁用 Magic quotes 是最靠谱的。参考下面的代码

 

 

; Magic quotes
;
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of ').
magic_quotes_sybase = Off

然而线上的主机可能无法让你修改 php.ini 文件,那么可以使用 .htaccess 文件禁用,加入下面的代码

php_flag magic_quotes_gpc Off

上述可移植的代码而言,无论是否禁用 magic_quotes,数据必须保持一致。那么下面的代码可以帮助您

<?php
if (get_magic_quotes_gpc()) {
    function stripslashes_deep($value) {
        $value = is_array($value) ?
            array_map('stripslashes_deep', $value) :
            stripslashes($value);
        return $value;
    }

    $_GET     = array_map('stripslashes_deep', $_GET);
    $_POST    = array_map('stripslashes_deep', $_POST);
    $_COOKIE  = array_map('stripslashes_deep', $_COOKIE);
    $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    php中get_magic_quotes_gpc()函数说明

    配置文件中哦,下面我来介绍一下get_magic_quotes_gpc()函数说明. get_magic_quotes_gpc函数介绍 取得 PHP 环境变数 magic_quotes_gpc 的值,属于 PHP 系统功能。 语法: long get_magic_quotes_gpc(void); 返回值: ...

    深入PHP magic quotes的详解

    特地查看了下手册,关于php magic quotes,常见的几个设置如下,magic_quotes_gpc,magic_quotes_sybase,magic_quote_runtime,这几个函数是在php.ini中去配置的,从手册中可以看出从php5.3后已经废除了这些特性,...

    php-magic-quotes-gpc:在PHP 5.4更高版本上为旧版代码实现magic_quotes_gpc

    PHP魔术引号实现在PHP 5.4更高版本上为旧版代码实现magic_quotes_gpc 如果您要将旧版源代码迁移到上述PHP 5.4版的环境中,但是根据Magic Quotes magic_quotes_gpc SQL保护,其中包括许多易受攻击的数据库查询代码。...

    PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法

    php $magic_quotes_gpc = get_magic_quotes_gpc(); @extract(daddslashes($_COOKIE)); @extract(daddslashes($_POST)); @extract(daddslashes($_GET)); if(!$magic_quotes_gpc) { $_FILES = daddslashes($_FILES); }...

    php magic_quotes_gpc的一点认识与分析

    对一般人来说看下前两段就可以了 Magic Quotes 代码: Magic Quotes is a process that automagically escapes incoming data to the PHP script. It’s preferred to code with magic quotes off and to instead ...

    php set_magic_quotes_runtime() 函数过时解决方法

    把函数: set_magic_quotes_runtime($new_setting); 替换成: ini_set(“magic_quotes_runtime”, $new_setting);

    基于PHP magic_quotes_gpc的使用方法详解

    本篇文章是对PHP中magic_quotes_gpc的使用方法进行了详细的分析介绍,需要的朋友参考下

    php中magic_quotes_gpc对unserialize的影响分析

    本文实例分析了php中magic_quotes_gpc对unserialize的影响。分享给大家供大家参考。具体如下: magic_quotes_gpc是一个php中一个给单双引号增加一些安全过滤的函数,但此函数对于我们使用unserialize函数时会产生一些...

    基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍

    当你的数据中有一些 \ ” ‘ 这样的字符要写入到数据库里面,又想不被过滤掉的时候,它就很有用,会在这些字符前自动加上\,如中国\地大物博”哈哈”中国\\地大物博\”哈哈\”可以使用set_maginc_quotes_runtime...

    PHP 转义使用详解

    php中数据的魔法引用函数 magic_quotes_gpc 或 magic_quotes_runtime  设置为on时,为我们引用的数据碰到 单引号’ 和 双引号” 以及 反斜线\ 时自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行两者...

    php参数过滤、数据过滤类

    中开启magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc可以把get,post,cookie里的引号变为斜杠。magic_quotes_runtime对于进出数据库的数据可以起到格式话的作用。其实,早在以前注入很疯狂时,这个参数...

    phpmailer v5.1 新版本,支持gmail,有各种示例

    4、class.phpmailer.php:(大概1241 和1246 两个地方) 注释掉 set_magic_quotes_runtime(0); 或者把下面的PHP_VERSION &lt; 6改为PHP_VERSION &lt; 5. if (PHP_VERSION &lt; 6) { $magic_quotes = get_magic_quotes_...

    php参数过滤、数据过滤类.zip

    中开启magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc可以把get,post,cookie里的引号变为斜杠。magic_quotes_runtime对于进出数据库的数据可以起到格式话的作用。其实,早在以前注入很疯狂时,这个参数...

    php 高级应用 程序漏洞

    php高级应用 程序漏洞 l 高级PHP应用程序漏洞审核技术 ¡ 前言 ¡ 传统的代码审计技术 ¡ PHP版本与应用代码审计 ¡ 其他的因素与应用代码审计 ¡ 扩展我们的字典 ¡ 怎么进一步寻找新的字典 ...n PHP中可能导

Global site tag (gtag.js) - Google Analytics