多年来,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: 初始化变量和值
许多开发人员都落入了实例化变量不赋值的陷阱,原因可能由于时间的限制而分心,或
缺乏努力。身份验证过程中的变量,应该在用户登录程序开始前就有值。这个简单的步骤
可以防止用户绕过验证程序或访问站点中某些他们没有权限的区域。