background image

多年来,PHP 一直是一个稳定的、廉价的运行基于 web 应用程序的平台。像大多数基于
web

 

的平台一 样,PHP 也是容易受到外部攻击的。开发人员、数据库架构师和系统管理

员在部署 PHP 应用程序到服务器之前都应该采取预防措施。大部分预防措施可以通过几 
行代码或者把应用程序设置稍作调整即可完成。
  1:管理安装脚本
如果开发人员已经安装了一套第三方应用程序的 PHP 脚本,该脚本用于安装整个应用程

 

序的工作组件,并提供一个接入点。大多数第三方软件包都建议在安装 后,删除该目录
包含的安装脚本。但开发人员希望保留安装脚本,他们可以创建一个.htaccess 文件来控
制管理访问目录。
AuthType Basic
AuthName “Administrators Only”
AuthUserFile /usr/local/apache/passwd/passwords
Require valid-user
任何未经授权的用户,如果试图访问一个受保护的目录,将会看到一个提示,要求输入

用户名和密码。密码必须匹配指定的 passwords”文件中的密码。
  2:头文件
在很多情况下,开发人员可以将分布在应用程序的几个脚本包含进一个脚本里。这些脚本

将包含一个 include”

 

指令,集成单个文件到原始页面的代码 里。当 include”文件包含

敏感信息,包括用户名、密码和数据库访问密钥时,该文件的扩展名应该命名成 .php 

,而不是典型的 .inc”

扩展。 .php”扩展确保 php 引擎将处理该文件,并防止任何未经

授权的访问。
  3: MD5 vs. SHA
在某些情况下,用户最终会创建自己的用户名和密码,而站点管理员通常会对表单提交

 

的密码加密,并保存在数据库中。在过去的几年中,开发人员会使用 MD5(消息摘要算
法)函数,加密成一个 128 位的字符串密码。今天,很多开发人员使用 SHA-1(安全散列
算法)函数来创建一个 160 位的字符串。
  4: 自动全局变量
php.ini

文件中包含的设置称为 register_globals”。P 服务器会根据 register_globals

 

的设置,将会为服务器变 量和查询字符串自动创建全局变量。在安装第三方的软件包时 ,
比如内容管理软件,像 Joomla 和 Drupal

 

,安装脚本将引导用户把 register_globals 设

置为 关闭 。将设置改变为 关闭 可以确保未经授权的用户无法通过猜测变量名称及验证
密码来访问数据。
  5: 初始化变量和值
许多开发人员都落入了实例化变量不赋值的陷阱,原因可能由于时间的限制而分心,或
缺乏努力。身份验证过程中的变量,应该在用户登录程序开始前就有值。这个简单的步骤
可以防止用户绕过验证程序或访问站点中某些他们没有权限的区域。