PHP 程序安全策略
PHP 是一种功能强大的语言和解释器,无论是作为模块方式包含到 web 服务器里安装 的还是作为单独的 CGI 程序程序安装的, 都能访问文件、 执行命令或者在服务器上打开链接。 而这些特性都使得 PHP 运行时带来安全问题。虽然 PHP 是特意设计成一种比用 Perl 或 C 语 言所编写的 CGI 程序要安全的语言, 但正确使用编译时和运行中的一些配置选项以及恰当的 应用编码将会保证其运行的安全性。
的编译安全。 一、PHP 的编译安全。
在编译 PHP 之前,首先确保操作系统的版本是最新的,必要的补丁程序必须安装过。 另外使用编译的 PHP 也应当是最新的版本,关于 PHP 的安全漏洞也常有发现,请使用最新 版本,如果已经安装过 PHP 请升级为最新版本。 安装编译 PHP 过程中要注意的 3 个问题: 1、只容许 CGI 文件从特定的目录下执行 、 文件从特定的目录下执行:首先把处理 CGI 脚本的默认句柄删除,然后 在要执行 CGI 脚本的目录在 http.conf 文件中加入 ScriptAlias 指令。 #Addhadler cgi-script .cgi ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
AllowOverride None Options None Order allow,deny Allow from all AllowOverride None Options ExecCGI Order allow,deny
Allow from all SriptAlias 的第一个参数指明在 Web 中的可用相对路径,第二个参数指明脚本放在服务 器的目录。应该对每个目录 别名都用 Directory,这样可使得除系统管理员之外的人不知道 Web 服务器上 CGI 脚本 的清单。 Directory 允许用户创建自己的 CGI 脚本。也可用 SriptAliasMatch,但 Directory 更容易使 用。 允许用户创建自己 CGI 脚本可能会导致安全
问题,你可能不希望用户创建自己的 CGI。 Apache 默认配置 是注释掉 cgi—script 的处理句柄,但有/cgi-bin 目录使用 SriptAlias 和 Directory 指令。 你也 可禁止 CGI 执行,但仍允许执行 PHP 脚本。 2.把 PHP 解析器放在 web 目录外 . 把 PHP 解析器放在 Web 目录树外是非常重要的做法。这样可以防止 web 服务器对 PHP 的解析器的滥用。特别是 不要把 PHP 解析器放在 cgi-bin 或允许执行 CGI 程序的目录下。然而,使用 Action 解 析脚本是不可能的,因为用 Action 指令时,PHP 解析器大多数要放在能够执行 CGI 的目录下 只有当 PHP 脚本作为 CGI 程序执行时,才能把 PHP 解析器放在 Web 目录树之外。 如果希望 PHP 脚本作为 CGI 程序执行(这们可以把 PHP 解析器放在 Web 目录树之外), 可以这样: ( 1)所有的 PHP 脚本必须位于能执行 CGI 程序的目录里。 程序的目录里。 所有的 ( 2)脚本必须是可执行的 仅在 UNIX/Linux 机器里 。 脚本必须是可执
行的(仅在 机器里)。 脚本必须是可执行的 (3)脚本必须在文件头包括 PHP 解析器的路径。 脚本必须在文件头包括 解析器的路径。 你可用下面命令使 PHP 脚本为可执行: #chmod +x test.php4 这样使在当前目录下的文件名为 test.PhP4 的脚本变为可执行。 下面是一个能作为 CGI
程序运行的 PHP 脚的小例子。 #!/usr/local/bin/php echo "This is a my small cgi program”
3. 按 Apache 模块方式安装 模块方式安装: 当将 PHP 作为 Apache 模块使用时,它将继承 Apche 的用户权限(一般情况下用户为 “nobody”)。这一点对于安全性和验证有不少影响。例如,使用 PHP 访问数据库,除非数 据库支持内建的访问控制,将不得不设置数据库对于用户“nobody”的可访问权限。这将 意味着恶意的脚本在没有访问用户名和密码,也能访问并修改数据库。通过 Apache 验证来 保护数据不被暴露,或者也可使用 LDAP、 .htaccess 文件等
设计自己的访问控制模型,并在
PHP 脚本中将此代码作为其中部分引入。 通常,一旦安全性建立,此处 PHP 用户(此情形即 Apache 用户)就风险大大降低了,会发现 PHP 护现在已被封禁了将可能的染毒