代码审计思路以及php配置

5pe25YWJ5aaC6aOO6L2m77yM5Y205LiN5Lya6L2u5Zue44CC5pyd6Zye5LiO5aSV5pmW77yM5Y+q5Zyo6L2s55Sf44CC

 

今天学了php代码审计的思路以及php配置的讲解,

1.了解MVC:

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

  • Model(模型)表示应用程序核心(比如数据库记录列表)。
  • View(视图)显示数据(数据库记录)。
  • Controller(控制器)处理输入(写入数据库记录)。

MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。 Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。

  通常模型对象负责在数据库中存取数据。 View(视图)是应用程序中处理数据显示的部分。

  通常视图是依据模型数据创建的。 Controller(控制器)是应用程序中处理用户交互的部分。

  通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。 MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。 MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。 下图是他的工作流程图:  

 

 

2.要熟悉知道一些常用的php框架,如thinkphp、Yaf、doitphp等框架

3.审计的一般流程是:

获取目录-->全局过滤-->模块文件-->C函数内容-->M函数内容-->V显示

4.一般方法:

(1)通读全文法:函数集文件、配置文件、安全过滤文件、index文件 一般从index文件入手,优点:比较全面,能挖到漏洞几率大,缺点:耗时间

(2)敏感关键字回溯法:可以高效判断敏感的位置,和挖出想要的漏洞。但覆盖不到逻辑漏洞,以及不能了解程序功能

(3)功能点定向审计:根据程序功能来挖洞,比较简单、高效(推荐使用)

(4)一切皆有可能  一切输入都是有危害的(可以控制变量) 一切进入函数的变量都是有害的的(变量到达有利用价值的函数)

 

二、php配置

php.ini 主要是一个全局的配置文件,在php启动时一般只读取一次,也就是说当你修改过php.ini时要重启php才能生效。

user.ini 自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果。作用:.htaccess是伪静态环境配置文件,用于lamp。
.user.ini是lnmp文件,里面放的是你网站的文件夹路径地址。目的是防止跨目录访问和文件跨目录读取.

1.配置的基本语法:

• 大小写敏感

•运算符:|、&、~、!

•空值表示法

foo=       ;

foo=none;

foo="none "

 

2.基本配置——安全模式

 

•安全模式

 php安全模式:safe_mode=on|off
启用safe_mode指令将对在共享环境中使用PHP时可能有危险的语言特性有所限制。可以将safe_mode是指为布尔值on来启用,或者设置为 off禁用。它会比较执行脚本UID(用户ID)和脚本尝试访问的文件的UID,以此作为限制机制的基础。如果UID相同,则执行脚本;否则,脚本失败。

•限制环境变量存取

safe_mode_allowed_env_vars = string

指定PHP程序可以改变的环境变量的前缀当这个选项的值为空时,那么php可以改变任何环境变量。如:

safe_mode_allowed_env_vars = PHP_当这个选项为空时那么php可以改变任何环境变量。

 

•外部程序执行目录

safe_mode_exce_dir="home/wwwroot"

•禁用函数

disable_funtion

为了更安全的运行PHP ,可以用此指令来禁止一些敏感函数的使用,当你想用本指令禁止一些危险函数时,切忌把d()函数也加到禁止列表,攻击者可以利用dI()函数加载自定义的php扩展来突破disable_function.配置禁用函数时可以使用逗号分隔函数名

•com组件

com_allow_dcom=false

PHP设置在安全模式下(safe_ mode) ,仍旧允许攻击者使用COM0函数来创建系统组件来执行任意命令。我推荐关闭这个函数来防止出现此漏洞

3.基本配置——变量控制

●全局变量注册开关

register_globals = off

php.ini的register globals选项的状认值预设为Off,在4.2版本之前是默认开启的,当register, _globals的设定为On时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,这是对服务器来讲是非常不安全的所以我们不能让它注册为全局变量。
●register. globals=On时,服务端使用POST或者GET提交的变量,都将自动使用全局变量的值来接收值

●是否允许包含远程文件
allow_url_include = off
该配置为on的情况下,可以直接包含远程文件,若包含的变量为可控的情况下,可以直
接控制变量来执行PHP代码

●是否允许打开远程文件
allow_url_open = on
允许本地PHP文件通过调用URL重写来打开和关闭写权限,默认的封装协议提
供的ftp和http协议来访问文件。

●HTTP头部版本信息
expose_php = off
防止了通过http头部泄露的php版本信息

●文件上传临时目录
upload_tmp_dir =
上传文件临时保存的目录,如果不设置的话,则采用系统的临时目录

●用户可访问目录
open_basedir = E:\Local Test\WWW
能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问,不应
该访问的文件,-定程度 上限制了phpshell的危害

●内部错误选项
display_errors = on
表明显示PHP脚本的内部错误。网站发布后建议关闭PHP的错误回显。在调试的时
候通常把PHP错误显示打开

●错误报告级别
error_reporting.= E_ ALL & ~E_ NOTICE
这个设置的作用是将错误级别调到最高,显示所有问题,方便排错

 

这就是今天get的内容,好好come on!!

As my watch begins. 我从今天开始守望。

 

相关文章