PHP网站安全与PEAR/PECL包使用指南
网站攻击类型及防御措施
当你将网站发布到公共互联网时,它就面临着被攻击的风险。虽然没有应用程序能做到绝对安全,但在PHP脚本中,你可以轻松防御几种常见的攻击。
滥用register_globals
register_globals是php.ini中的一个设置,用于控制变量是否根据表单元素或cookie自动赋值。自PHP 4.2.0起,其默认值为关闭,但许多主机为兼容旧脚本会重新启用它,这给恶意用户提供了攻击途径。
例如,以下代码:
<?php if (user_is_admin()) { $access_level = 10; } show_menu($access_level); // ... and so on ... ?>若register_globals启用,攻击者可通过在URL后添加参数来修改$access_level的值,如:
http://www.example.com/file.php?access_level=10为避免此类问题,你可以:
1. 禁用register_globals。
2. 使用正确的$_GET和$_POST超全局变量。
3. 初始化可能不安全的变量。
4. 在开发和测试时将error_reporting设置为E_ALL。
若无法在php.ini中禁用register_globals,可在.htaccess文件中添加: