`

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);
}

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    get_magic_quotes函数详解

    `get_magic_quotes_gpc()` 和 `get_magic_quotes_runtime()` 函数是PHP早期版本中用于自动转义用户提交的数据以防止SQL注入等安全问题的两个函数。本文将详细介绍这两个函数的功能、使用方法以及它们在PHP中的作用。...

    php中get_magic_quotes_gpc()函数说明

    在PHP编程语言中,`get_magic_quotes_gpc()`是一个非常重要的函数,主要用于处理用户通过GET、POST或COOKIE方式提交的数据。这个函数的核心作用是检查PHP的配置选项`magic_quotes_gpc`的状态,该选项决定了PHP是否会...

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

    magic_quotes_gpc与magic_quotes_runtime是PHP语言中用于自动转义特殊字符的两个配置指令,它们的主要目的是为了防止SQL注入等安全问题。这两个指令对于处理用户输入的数据,尤其是从GET、POST、COOKIE等超全局变量...

    深入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保护,其中包括许多易受攻击的数据库查询代码。...

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

    标题中提到的“php set_magic_quotes_runtime() 函数过时解决方法”指出,在PHP中,`set_magic_quotes_runtime()` 函数由于不再被支持,需要寻找替代方案来处理运行时魔术引号的设置。在PHP的历史版本中,这个函数...

    基于PHP magic_quotes_gpc的使用方法详解

    在PHP开发中,magic_quotes_gpc是一个用于自动转义输入数据的全局配置选项。它主要作用于Web客户服务端,其功能是从用户请求开始时自动为所有的GET、POST和COOKIE数据中的特殊字符添加反斜杠(\)作为转义字符。这个...

    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中magic_quotes_gpc对unserialize的影响分析

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

    PHP的特殊字符转译函数使用.pdf

    get_magic_quotes_gpc()函数是PHP中用于获取当前PHP环境变量magic_quotes_gpc状态的函数。magic_quotes_gpc是一个配置指令,用于决定是否自动为GPC(GET, POST, COOKIE)传来的数据中的特殊字符添加反斜线转义。...

    PHP 转义使用详解

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

    php中mysql数据库的sql注入与全面防范

    Magic Quotes 是 PHP 中的一个功能,它可以自动将用户输入的数据进行转义,以防止 SQL 注入。例如,Magic Quotes 可以将用户输入的单引号(')转义为反斜杠(\)和单引号(\'),以防止 SQL 注入。 3. 使用参数化...

Global site tag (gtag.js) - Google Analytics