安全矩阵

 找回密码
 立即注册
搜索
查看: 3567|回复: 0

Web安全:magic_quotes_gpc的安全特性

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2020-10-10 19:32:59 | 显示全部楼层 |阅读模式
  
Web安全:magic_quotes_gpc的安全特性

magic_quotes_gpc即gpc魔术引号开关,magic_quotes_gpc的作用为转义客户端传过来的数据中的预定义特殊字符(预定义特殊字符为单引号、双引号、反斜杠及Null),magic_quotes_gpc对从$_GET、$_POST及$_COOKIE等数组传过来的数据中的预定义特殊字符添加反斜杠进行转义。在magic_quotes_gpc=on的情况下,若传过来的数据有预定义特殊字符,都会被添加反斜杠。若magic_quotes_gpc=off,那么我们必须调用addslashes这个函数来对字符串进行转义。正是因为这个选项必须为on,但是又让用户自己进行配置的矛盾,所以在PHP 6中删除了这个选项,一切的编程都需要在magic_quotes_gpc=off下进行。在这样的环境下如果不对用户数据中的预定义特殊字符进行转义,后果不仅是程序错误,而且会面临数据库被SQL注入攻击的危险。所以,建议大家不要再依赖这个设置为on的语句了。我们可以通过以下代码来探测PHP环境中magic_quotes_gpc是否开启。测试文件为magic.php,其代码如下。


  1. <?php
  2. //当magic_quotes_gpc=on时,get_magic_quotes_gpc函数的返回值为1
  3. /当magic_quotes_gpc=off时,get_magic_quotes_gpc函数的返回值为0
  4. if (get_magic_quotes_gpc())
  5. {
  6. echo 'magic_quotes_gpc开启';
  7. }
  8. else
  9. {
  10. echo 'magic_quotes_gpc未开启';
  11. }
  12. ?>
复制代码



比如,本地PHP环境版本,如图1所示。

图1  本地PHP环境版本

我们将magic.php文件放在本地站点根目录之下测试,如图2所示。

图2  测试magic.php文件

由此,可以说明:本地PHP环境并没有开启magic_quotes_gpc,即magic_quote_gpc=off或者magic_quote_gpc这个特性在本地PHP环境版本里面已经被PHP社区废除了。那么,在编写PHP代码的时候,就需要在PHP代码中使用addslashes函数对$_GET、$_POST或者$_COOKIE等数组进行预定义特殊字符的转义,不然,在这种情况下编写的PHP代码就会不安全。事实上,本地magic_quotes_gpc默认设置如图3所示。

图3  本地magic_quote_gpc默认设置

那么,我们怎么才能编写出安全的PHP代码呢?答案是合理地使用好get_magic_guotes_gpc、magic_quotes_gpc或者addslashes这3个函数。接下来,介绍一下addslashes函数,addslashes函数返回在预定义特殊字符之前添加反斜杠的字符串。addslashes函数转义输入数据中的单引号,例子如下。

  1. <?php
  2. echo '转义前:';第3章Web 安全特性39
  3. $str = "Who's Kevin David Mitnick?";
  4. echo $str;
  5. echo '<br />';
  6. echo '转义后:';
  7. echo addslashes($str);
  8. ?>
复制代码

执行结果,如图4所示。

图4  执行addslashes函数

PHP较低版本(5.3.0版本及以下)会对所有的$_GET、$_POST或者Cookie中的数据自动运行addslashes函数。因为,在较低版本的PHP中,magic_quotes_gpc默认是开启的,所以,此时我们不应该对已转义过的字符串使用addslashes函数,这样会导致双重转义。遇到这种情况时,我们可以使用get_magic_quotes_gpc函数来进行检测。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 07:27 , Processed in 0.014659 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表