get_magic_quotes_gpc() 你到…

来源:互联网 发布:ubuntu怎么用windows 编辑:程序博客网 时间:2024/06/02 22:59

在php的配置文件中,有个布尔值的设置,就是magic_quotes_runtime,当它打开时,

php的大部分函数自动的给从外部引入的(包括数据库或者文件)数据中的溢出字符加上反

斜线。当然如果重复给溢出字符加反斜线,那么字符串中就会有多个反斜线,所以这时

就要用set_magic_quotes_runtime()与get_magic_quotes_runtime()设置和检测php.ini

文件中magic_quotes_runtime状态。为了使自己的程序不管服务器是什么设置都能正常

执行。可以在程序开始用get_magic_quotes_runtime检测该设置的状态决定是否要手工处理

,或者在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉该设置。

magic_quotes_gpc设置是否自动为GPC(get,post,cookie)传来的数据中的\'\"\\加上反斜

线。可以用get_magic_quotes_gpc()检测系统设置。如果没有打开这项设置,可以使用

addslashes()函数添加,它的功能就是给数据库查询语句等的需要在某些字符前加上了反

斜线。这些字符是单引号(\')、双引号(\")、反斜线(\\)与NUL(NULL 字符)。

一般用法如下;
if(!get_magic_quotes_gpc())
{
    addslashes($prot);
}


 get_magic_quotes_gpc()

功能: 取得PHP 环境变数 magic_quotes_gpc 的值。

语法: longget_magic_quotes_gpc(void);

传回值:长整数

函式种类: PHP系统功能


本函式取得 PHP环境设定的变数 magic_quotes_gpc(GPC, Get/Post/Cookie) 值。传回 0 表示关闭本功能;传回 1表示本功能开启。当magic_quotes_gpc 开启时,所有的 '(单引号), " (双引号), \(反斜线) 和 空字符会自动转为含有反斜线的溢出字符。

get_magic_quotes_gpc的功能为:是否为GET、POST、COOKIE传来的数据中的‘ 单引号 “”双引号 \反斜线 加上反斜线

如果get_magic_quotes_gpc= ON ,则返回1,PHP解析器就会自动为post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。


--------------------------------------------------------------------------------------------------------------------

addslashes()

功能:使用反斜线引用字符串

语法:string addslashes ( string str)

返回值:返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线()以及(NULL字符)。

--------------------------

        如果get_magic_quotes_gpc= off,返回0,那么我们就可以调用addslashes() 这个函数来为字符串增加转义。

      ---------------------------

       当然如果php中重复给溢出字符加反斜线,那么字符串中就会有多个反斜线,所以这时就要用set_magic_quotes_runtime()get_magic_quotes_runtime()设置和检测文件中magic_quotes_runtime状态。

     1 . 取得 PHP 环境变量 magic_quotes_runtime 的值。

          语法: long get_magic_quotes_runtime(void);

          返回值: 长整数

          函数种类: PHP 系统功能

         内容说明:  本函数取得 PHP 环境配置的变量 magic_quotes_runtime 值。返回0 表示关闭本功能;返回 1 表示本功能打开。若 magic_quotes_runtime 打开时,所有外部引入的数据库资料或者文件等等都会自动转为含有反斜线溢出字符的资料。
                 

         中国\地大物博"哈哈"                 这样的字符要写入到数据库里面,又想不被过滤掉的时候,它就很有用,会在这些字符前加上\ 变成

         中国\\地大物博\"哈哈\"              set_magic_quotes_runtime是用来设置PHP 环境配置的变量 magic_quotes_runtime值,  0-关闭 1-打开



      ---------------------------

为了使自己的程序不管服务器是什么设置都能正常执行。可以在程序开始get_magic_quotes_runtime检测该设置的状态决定是否要手工处理,或者在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉该设置。

---------------------------

可以用get_magic_quotes_gpc()检测系统设置。如果没有打开这项设置,可以使用addslashes()函数添加,它的功能就是给数据库查询语句等的代码需要在某些字符前加上反斜线。

----------------

正是因为这个选项必须为On,但是又让用户进行配置的矛盾,在PHP6中删除了这个选项,一切的编程都需要在magic_quotes_gpc=Off下进行了。在这样的环境下如果不对用户的数据进行转义,后果不仅仅是程序错误而已了。同样的会引起数据库被注入攻击的危险。


------------------------------------------------------------------------------------------------------------------------------

1.对于magic_quotes_gpc=on的情况,

         我们可以不对输入和输出数据库的字符串数据作addslashes()和stripslashes()的操作,数据也会正常显示。如果此时你对输入的数据作了addslashes()处理,
         那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
 
      2. 对于magic_quotes_gpc=off 的情况

         必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。

      补充:

      magic_quotes_gpc 作用范围是:WEB客户服务端;作用时间:请求开始时,例如当脚本运行时.
      magic_quotes_runtime作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;作用时间:每次当脚本访问运行状态中产生的数据

0 0