针对 PHP 的网站主要存在下面几种攻击方式 :
1 、命令注入 (Command Injection)
2 、 eval 注入 (Eval Injection)
3 、客户端脚本攻击 (Script Insertion)
4 、跨网站脚本攻击 (Cross Site Scripting, XSS)
5 、 SQL 注入攻击 (SQL injection)
6 、跨网站请求伪造攻击 (Cross Site Request Forgeries, CSRF)
7 、 Session 会话劫持 (Session Hijacking)
8 、 Session 固定攻击 (Session Fixation)
9 、 HTTP 响应拆分攻击 (HTTP Response Splitting)
10 、文件上传漏洞 (File Upload Attack)
11
、目录穿越漏洞 (Directory Traversal)
12 、远程文件包含攻击 (Remote Inclusion)
13 、动态函数注入攻击 (Dynamic Variable Evaluation)
14 、 URL 攻击 (URL attack)
15 、表单提交欺骗攻击 (Spoofed Form Submissions)
16 、 HTTP 请求欺骗攻击 (Spoofed HTTP Requests)
以后的每期连载,会逐个介绍这些漏洞的原理和防御方法。
几个重要的 php.ini 选项
Register Globals
php>=4.2.0 , php.ini 的 register_globals 选项的默认值预设为 Off ,当 register_globals 的设定
为 On 时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,而且由于 PH P
不必事先初始化变量的值,从而导致很大的安全隐患。
例 1:
//check_admin() 用于检查当前用户权限,如果是 admin 设置 $is_admin 变量为 true ,然后下 面
判断此变量是否为 true ,然后执行管理的一些操作
//ex1.php
<?php
if (check_admin())
{
$is_admin = true;
}
if ($is_admin)
{
do_something();
}
?>
这一段代码没有将 $is_admin 事先初始化为 Flase ,如果 register_globals 为 On ,那么我们直
接提交 http://www.sectop.com/ex1.php?is_admin=true, 就可以绕过 check_admin() 的验证
例 2: