PHP代码审计学习_day1

0x00 工具的下载和安装

RIP、seay、phpstrom等等,自行百度安装。php


0x01 MVC架构

MVC是一种使用MVC设计建立Web应用程序的模式。MVC模式同时提供了对HTML、CSS和JavaScript的彻底控制。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。表示应用程序核心(好比数据库记录列表),一般模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。显示数据(数据库记录),一般视图是依据模型数据建立的。
Controller(控制器)是应用程序中处理用户交互的部分。处理输入(写入数据库记录),一般控制器负责从视图读取数据,控制用户输入,并向模型发送数据。shell


0x02 常见的PHP框架

ThinkPHP:全中文,易上手,对环境配置没有什么要求。
Yaf:听说是世界上最快的PHP框架,用C写的扩展,安装的时候须要编译。
Laravel、Kohana、Codeigniter、Yii
Smyfony:这个框架听说很强。
doitphp:国内PHP框架的后起之秀。
注:以上顺序没有排名之分。数据库


0x03 功能点定向审计

程序安装、文件上传、文件管理、登陆验证、备份恢复、找回密码。php框架


0x04 PHP核心配置php.ini

(1)基本配置-语法

大小写敏感
directive = value(指令 = 值)
foo = bar ≠ FOO = bar
运算符
|、&、~、!
空值的表达方式
foo = ;
foo = none;
foo = "none";

安全

(2)基本配置-安全模式

安全模式
safe_mode = off
安全模式,用来限制文档的存取、限制环境变量的存取、控制外部程序的执行。
注:本特性已在PHP5.4.0被移除
这里举一个例子,建立一个test.php文件,内容为服务器

<?php
$cmd = $_GET['id'];
system($cmd);
?>

访问127.0.0.1/test.php?id=ipconfig,就能够看到ipconfig回显的内容。
而后去开启safe_mode = on,再次访问,就没有任何的回显了。
限制环境变量存取
safe_mode_allowed_env_vars = string
指定PHP程序能够改变的环境变量的前缀,当这个选项的值为空时,那么php能够改变任何环境变量,如safe_mode_allowed_env_vars = PHP_,当这个选项的值为空时,那么php能够改变任何环境变量。
外部程序执行目录
safe_mode_exec_dir = "E:\Local Test\WWW"(指定一个网站的主目录就能够了,其余的看状况而定)
禁用函数
disable_functions = 你想禁用的函数名
为了更安全的运行PHP,能够用此指令来禁止一些敏感函数的使用,当你想用该指令禁止一些危险函数时,切记把dl()函数也加到禁止列表,攻击者能够利用dl()函数加载自定义的php扩展来突破disable_function。配置禁用函数时可使用逗号分隔函数名。
com组件
com.allow_dcom = false
PHP设置在安全模式下(safe_mode),仍旧容许攻击者使用COM()函数来建立系统组件来执行任意命令,能够关闭这个函数来防止出现漏洞。
使用COM()函数须要在PHP.ini中配置extension=php_com_dotnet.dll,若是PHP版本小于5.4.5,则不须要。架构

(3)基本配置-控制变量

全局变量注册开关
register_globals = off
默认值为off,在4.2版本以前是默认开启的。当为On时,程序能够接收来自服务器的各类环境变量,包括表单提交的变量,这是对服务器来说时很是不安全的,因此不能让他注册为全局变量。
为off时,服务器端经过$_GET['name']来获取数据。
为on时,服务器端对POST或GET提交的变量,都会自动使用全局变量来接受值。
魔术引号自动过滤
magic_quotes_gpc = on
注:该特性在PHP5.4.0中被移除
在php.ini中默认关闭。为on时,会自动将全部的单引号、双引号、反斜杠和空字符都加上反斜杠来进行转义,开启会提升网站的安全性,但也会影响HTTP请求的数据。也可使用addslashes来转义提交的HTTP请求数据,或是用stripslashes来删除转义。mvc

(4)基本配置-远程文件

是否容许包含远程文件
allow_url_include = off
为on时,能够直接包含远程文件,若包含的变量为可控的,则能够直接控制变量来执行PHP代码。
是否容许打开远程文件
allow_url_open = on
容许本地PHP文件经过调用URL重写来打开和关闭写权限,默认的封装协议提供的ftp和http协议来访问文件。框架

(5)基本配置-目录权限

HTTP头部版本信息
expose_php = off
防止了经过http头部泄露的php版本信息
文件上传临时目录
upload_tmp_dir =
上传文件临时保存的目录,若是不设置的话,则采用系统的临时目录
用户可访问目录
open_basedir = 本身指定目录
可以控制PHP脚本只能访问指定的目录,这样可以避免PHP脚本访问不该该访问的文件,必定程度上限制了phpshell的危害。函数

(6)基本配置-错误信息

内部错误选项
display_errors = on
显示PHP脚本的内部错误,网站发布后建议关闭PHP的错误回显,在调试的时候一般把PHP错误显示打开
错误报告级别
error_reporting = E_ALL & ~E_NOTICE
这个设置的做用是将错误级别调到最高,显示全部问题,方便排错。


注:以上的php.ini中的配置,在php.ini中都会有注释来进行说明,不明白或是不清楚的均可以查看注释