• 技术文章 >后端开发 >php教程

    PHP 魔术引号详解讲解_PHP教程

    2016-07-13 17:41:15原创584
    PHP之安全在于其默认配置php.ini-dist中具备一个magic_quotes_gpc = On的东西,叫“魔术引号(Magic Quote)”,对PHP初学者很有用,“尽管SQL注入在魔术引号打开的情况下仍然有可能实现,但起码系统的风险减少很多了”(PHP手册)。但是对于 PHP代码的移植性却造成了影响,而且并不是每一个被魔术引号转义的数据都需要写入数据库,这样就对程序的执行效率造成了影响,倒不如使用 addslashes(),所以在
    php.ini-recommended中magic_quotes_gpc = Off。
    这里用一段函数来判断是否打开了magic_quotes_gpc,然后确定是否需要addslashes(),当然,这样做可能效率会受到影响。

    PHP系统配置文件php.ini中有三个魔术引号配置选项:

    魔术引号配置选项 描述 运行时改变 PHP中的默认值
    magic_quotes_gpc 如果打开的话,影响 到 HTTP 请求数据(GET,POST 和 COOKIE)。 NO On
    magic_quotes_runtime 如果打开的话,大部 份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。(前提是magic_quotes_gpc = On) YES Off
    magic_quotes_sybase 当关闭时,所有的 (单引号),"(双引号),(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。这和 addslashes() 作用完全相同。
    如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 。而双引号、反斜线 和 NULL 字符将不会进行转义。
    (前提是magic_quotes_gpc = On)
    YES Off

    从上表可以看出,对于magic_quotes_runtime,在程序中用 ini_set(magic_quotes_runtime, 0);就可以把它关掉,然后可以用自己的方法来处理来自数据库或文件的数据。   
    但是要处理外部传来的全局变量就比较麻烦了。下面的代码可供使用,这里将屏蔽magic_quotes_sybase,只是将引号之类的东西前面加上反斜线(),用于提交给MySql数据库。
    functionquotesOuterVars($var) {
    if(is_array($var)) {
    returnarray_map(quotesOuterVars,$var);
    }else{
    if(get_magic_quotes_gpc()) {
    // 如果 magic_quotes_sybase=On,我们先把 替换成 ,然后再addslashes
    if(ini_get(magic_quotes_sybase)) {
    $var = str_replace("", "",$var);
    $var=addslashes($var);
    }
    }else{
    $var=addslashes($var);
    }
    returntrim($var);
    }
    }
    ?>

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/486162.htmlTechArticlePHP之安全在于其默认配置php.ini-dist中具备一个magic_quotes_gpc = On的东西,叫“魔术引号(Magic Quote)”,对PHP初学者很有用,“尽管SQL注入在...

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP 魔术 引号 详解 讲解 PHP 安全 在于 默认 配置 php.ini-dist 具备 一个 mag
    上一篇:PHP5 PDO连接数据库详解_PHP教程 下一篇:PHP 接口与引用接口详解_PHP教程
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 20+值得了解的PHP面试题(附答案分析)• Thinkphp入门三—框架模板、变量(47),thinkphp47_PHP教程• php简单实现无限分类树形列表的方法,php分类树形列表_PHP教程• ThinkPHP 404页面的设置方法_PHP教程• php实现递归与无限分类的方法_PHP教程
    1/1

    PHP中文网