【 安全模式 】
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.3 mod_ssl/2.8.16
OpenSSL/0.9.7cの場合、expose_phpオプションをオンにすると、上記のヘッダー情報にPHPのバージョン情報が含まれなくなります。もちろん、ユーザーが Web サイトにアクセスすると、.php ファイル拡張子も表示されます。完全に別のファイル拡張子を使用したい場合は、httpd.conf で次の行を見つける必要があります: AddType application/x-httpd .php そして、.php を任意のファイル拡張子に変更できます。ファイル拡張子はスペースで区切って好きなだけ指定できます。サーバー側で PHP を使用して .html および .htm ファイルを解析する場合は、次のようにオプションを設定します。 AddType application/x-httpd .html .htm (HTML の解析: PHP を使用して解析するように Web サーバーを構成します)すべての 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 = ”。