您当前的位置: 首页 > 网站编程 > PHP教程 > PHP安全配置详解

PHP安全配置详解

作者:不详 来源:网络 发布时间: 2011-12-30 17:48 点击:
PHP勿庸置疑是非常强大的服务器端脚本语言,但是强大的功能总是伴随着重大的危险,在这章里,你将学习到使用PHP的安全模式来阻止一些PHP潜在的危险因素。 【安全模式】 PHP的安全模式提供一个基本安全的共享环境,在一个有多个用户帐户存在的PHP开放的Web服务器上。当

PHP安全配置详解

  PHP勿庸置疑是非常强大的服务器端脚本语言,但是强大的功能总是伴随着重大的危险,在这章里,你将学习到使用PHP的安全模式来阻止一些PHP潜在的危险因素。
  
  【安全模式】
  
  PHP的安全模式提供一个基本安全的共享环境,在一个有多个用户帐户存在的PHP开放的Web服务器上。当一个Web服务器上运行的PHP打开了安全模式,那么一些函数将被完全的禁止,并且会限制一些可用的功能。
  
  [使用安全模式来强制限制]
  
  在安全模式下,一些尝试访问文件系统的函数功能将被限制。运行Web服务器用户ID,如果想要操作某个文件,则必须拥有该文件读取或者写入的访问权限,实现这个限制功能对于PHP来说是没有问题的。
  
  在安全模式开启的时候,尝试读取或者写入一个本地文件的时候,PHP将检查当前访问用户是否是该目标文件的所有者。如果不是所有者,则该操作会被禁止。(写入权限:在较低级别的文件访问权限下,可能会允许读取或者写入系统操作系统的文件,通过PHP的安全模式实现了防止你操作另外一个用户文件的操作。当然,一个Web服务器可能能够访问一个具有全局写入权限的任意文件。)
  
  当安全模式打开的时候,以下函数列表的功能将会受到限制:
  
  chdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,highlight_file,show_source,include,symlink,link,touch,mkdir,unlink
  
  同样的,一些PHP扩展中的函数也将会受到影响。(加载模块:在安全模式下dl函数将被禁止,如果要加载扩展的话,只能修改php.ini中的扩展选项,在PHP启动的时候加载)
  
  在PHP安全模式打开的时候,需要执行操作系统程序的时候,必须是在safe_mode_exec_dir选项指定目录的程序,否则执行将失败。即使允许执行,那么也会自动的传递给escapeshellcmd函数进行过滤。
  
  以下执行命令的函数列表将会受到影响:
  
  exec,shell_exec,passthru,system,popen
  
  另外,背部标记操作符(`)也将被关闭。
  
  当运行在安全模式下,虽然不会引起错误,但是putenv函数将无效。同样的,其他一些尝试改变PHP环境变量的函数set_time_limit,set_include_path也将被忽略。
  
  [打开安全模式]
  
  打开或者关闭PHP的安全模式是利用php.ini中的safe_mode选项。如果要激活安全模式给当前所有共享Web服务器的用户,只要设置配置选项为:safe_mode=On当函数在访问文件系统的时候将进行文件所有者的检查。缺省情况下,会检查该文件所有者的用户ID,当你能够修改文件所有者的组ID(GID)为safe_mode_gid选项所指定的。如果你有一个共享库文件在你的系统上,当你碰到需要include或require的时候,那么你可以使用safe_mode_include_dir选项来设置你的路径,保证你的代码正常工作。(包含路径:如果你想要使用safe_mode_include_dir选项包含更多的包含路径,那么你可以象include_path选项一样,在Unix/Linux系统下使用冒号进行分割,在Windows下使用分号进行分割)比如你想要在安全模式下包含/usr/local/include/php下的文件,那么你可以设置选项为:safe_mode_include_dir=/usr/local/include/php如果你的包含的文件是需要执行的,那么你可以设置safe_mode_exec_dir选项。比如你需要/usr/local/php-bin路径下的文件是可以执行的,那么可以设置选项为:safe_mode_exec_dir=/usr/local/php-bin(可执行:如果你执行的程序在/usr/bin目录下,那么你可以把这些的二进制文件,连接到你指定选项下能够执行的路径)如果你想设置某些环境变量,那么可以使用safe_mode_allowed_env_vars选项。这个选项的值是一个环境变量的前缀,缺省是允许PHP_开头的环境变量,如果你想要改变,可以设置该选项的值,多个环境变量前缀之间使用逗号进行分割。比如下面允许时区的环境变量TZ,那么修改该选项的值为:safe_mode_allowed_env_vars=PHP_,TZ【其他的安全特征】除了安全模式以外,PHP还提供了许多其他许多特征来保证PHP的安全。
  
  [隐藏PHP]
  
  你能够在php.ini里使用expose_php选项来防止Web服务器泄露PHP的报告信息。如下:expose_php=On利用整个设置,你能够阻碍一些来自自动脚本针对Web服务器的攻击。通常情况下,HTTP的头信息里面包含了如下信息:Server:Apache/1.3.33(Unix)PHP/5.0.3mod_ssl/2.8.16
  
  OpenSSL/0.9.7c在expose_php选项打开以后,PHP的版本信息将不包含在上面的头信息里。当然,用户访问网站的时候同样能够看到.php的文件扩展名。如果你想整个的使用不同的文件扩展名,你需要在httpd.conf中找到如下这行:AddType application/x-httpd.php你就可以修改.php为任何你喜欢的文件扩展名。你能够指定任意多个的文件扩展名,中间使用空格进行分割。如果你想在服务器端使用PHP来解析.html和.htm文件的时候,那么你设置选项如下:AddType application/x-httpd.html.htm(解析HTML:配置你的Web服务器使用PHP去解析所有的HTML文件,但是如果非服务器端代码也需要PHP去解析,会影响服务器的性能。静态页面你可以使用不同的扩展名,这样能够消除对PHP脚本引擎的依赖,增强性能。)
  
  [文件系统安全]
  
  安全模式限制了脚本所有者只能访问属于自己的文件,但是你可以使用open_basedir选现来指定一个你必须访问的目录。如果你指定了一个目录,PHP将拒绝访问除了该目录和该目录子目录的其他目录。open_basedir选项能够工作在安全模式之外。限制文件系统只能访问/tmp目录,那么设置选项为:open_basedir=/tmp[函数访问控制]你能够在disable_functions选项中使用逗号分割来设定函数名,那么这些函数将在PHP脚本中被关闭。这个设置能够工作在安全模式之外。disable_functions=dl当然,同样的你能够使用disable_classes选项来关闭对一些类的访问。
  
  [数据库安全]
  
  假设你的PHP脚本中包含一个基于表单值来执行的Mysql查询:$sql=“UPDATE mytable SET col1=”.

分享到:
本文"PHP安全配置详解"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4