技术开发 频道

初步了解 PHP V6 中的新特性

  删除了几个函数

  这个小节概述了在 PHP V6 中删除的几个函数。

  删除了 register_globals

  PHP V5 在 php.ini 中使用 register_globals 配置选项从环境和 HTTP 请求参数定义变量。不过,register_globals 生成不安全的代码。因此,在 PHP V6 中删除了 register_globals。

  register_globals 生成不安全代码的方式之一是 authenticate.php,它使用 $auth 变量对用户进行身份验证。因为 $auth 没有被初始化,所以它的值可能通过使用 register_globals 注入变量来定义,比如 GET authenticate.php?auth=1。  

if (authenticated_user()) {

  $auth
= true;

  }

  
if ($auth) {

  include
"/data.php";

  }

  ?
>

  register_globals 注入的变量也可能在会话中生成不安全的代码。看看以下代码,当设置了 $username 变量时,将在用户会话中显示一条欢迎消息。但是,当启用 register_globals 时,可能会使用 HTTP 请求参数注入 $username 变量。  

 if (isset($_SESSION['username'])) {

  echo
"Welcome {$_SESSION['username']}";

  }
else {

  echo
"Welcome Guest";

  }

  ?
>

  所有使用 register_globals 的函数都被删除了,比如 session_register。如果需要导入请求变量,可以使用 import_request_variables。或者使用 $_POST、$_GET、$_COOKIE 和 $_REQUEST 变量。如果设置了 register_globals,PHP V6 将在启动时抛出 E_CORE_ERROR。

  删除了 magic_quotes

  在 PHP V5 中,当启用了 magic_quotes 配置选项时,它会在输入数据中自动将所有单引号(')、双引号(")、反斜杠(\)和 NULL 字符转义为带反斜杠的(\)PHP 脚本。Magic Quotes 减少了 SQL 注入(一种能够篡改 SQL 命令的技术)的风险。Magic Quotes 便于将数据插入到数据库中。不 使用 Magic Quotes 的理由是考虑到移植性、性能和方便性。

  您需要知道是否关闭了 Magic Quotes。如果 Magic Quotes 处于 on,而您认为它处于 off,应用程序就会出现额外的斜杠。如果 Magic Quotes 处于 off,而您认为它处于 on,应用程序就可能遭受 SQL 注入攻击。Magic Quotes 会损害性能,因为并不是所有转义数据都被插入到数据库。一个更好的代替办法是在运行时使用转义函数,比如 addslashes。Magic Quotes 可能带来不便,因为并不是所有数据都需要转义。可以使用 stripslashes 函数删除多余的斜杠。

  PHP V6 不再支持 magic_quotes、magic_quotes_sybase 和 magic_quotes_gpc 设置。如果在启动时发现这些设置,PHP 将发出一个 E_CORE_ERROR。此外,还删除了 get_magic_quotes_gpc() 函数。

  删除了 safe_mode

  在 PHP V5 中,safe_mode 配置选项可用于解决与共享服务器有关的安全问题。它确保需要打开或包含的文件的用户必须与执行这些文件的脚本的用户相同。safe_mode 并不是绝对安全的。

  考虑这样一个场景,一个应用程序使用 Web 服务器的 ID 并生成缓存文件或映像。如果该应用程序由客户机用户加载,PHP 脚本将不能打开缓存文件或映像,因为用户 ID 不匹配。并且,safe_mode 可以绕过库。

  在 PHP V6 中删除了 safe_mode 选项。如果检测到 safe_mode 设置,将抛出 E_CORE_ERROR。open_basedir 配置仍然可用,它限制 PHP 可以在特定目录树中打开的文件。

0
相关文章