dvwa 源码分析(二) --- dvwaPage.inc.php分析
在setup.php中,包含了这个文件,所以这里分析这个文件。
<?php if( !defined( 'DVWA_WEB_PAGE_TO_ROOT' ) ) { define( 'DVWA System error- WEB_PAGE_TO_ROOT undefined' );
exit; } session_start(); // Creates a 'Full Path Disclosure' vuln.
在setup.php中,定义了DVWA_WEB_PAGE_TO_ROOT为空
所以这里判断是否已经定义,如果未定义,则会报错,我测试了,报错是
Warning: define() expects at least 2 parameters, 1 given
然后退出。
然后是启用会话。
// Include configs
require_once DVWA_WEB_PAGE_TO_ROOT.'config/config.inc.php'; require_once( 'dvwaPhpIds.inc.php' );
然后再次包含两个文件,我们先去分析这两个文件。
dvwa 源码分析(三) --- config.inc.php分析
dvwa 源码分析(四) --- dvwaPhpIds.inc.php分析
分析了这两个文件,我们继续往下分析
声明html变量
// Declare the $html variable
if(!isset($html)){ $html = ""; }
$html变量声明
设置dvwa安全等级cookie
// Set security cookie to high if no cookie exists
if (!isset($_COOKIE['security'])){ setcookie( 'security', 'high' ); }
设置安全等级cookie
返回dvwa版本号
// DVWA version
function dvwaVersionGet() { return '1.0.7'; }
dvwa 版本
dvwa 发布日期
// DVWA release date
function dvwaReleaseDateGet() { return '08/09/10'; }
dvwa发布日期
以数组的形式定义会话信息
// Start session functions -- function &dvwaSessionGrab() { if( !isset( $_SESSION[ 'dvwa' ] ) ) { $_SESSION[ 'dvwa' ] = array(); } return $_SESSION[ 'dvwa' ];
}
启用会话功能
判断用户是否登录,是否使用IDS功能
function dvwaPageStartup( $pActions ) { if( in_array( 'authenticated', $pActions ) ) { if( !dvwaIsLoggedIn()){ dvwaRedirect( DVWA_WEB_PAGE_TO_ROOT.'login.php' ); }
} if( in_array( 'phpids', $pActions ) ) { if( dvwaPhpIdsIsEnabled() ) { dvwaPhpIdsTrap(); }
}
}
dvwaPageStartup
启用IDS功能
function dvwaPhpIdsEnabledSet( $pEnabled ) { $dvwaSession =& dvwaSessionGrab(); if( $pEnabled ) { $dvwaSession[ 'php_ids' ] = 'enabled'; } else { unset( $dvwaSession[ 'php_ids' ] ); }
}
dvwaPhpIdsEnabledSet
判断是否启用了IDS功能
function dvwaPhpIdsIsEnabled() { $dvwaSession =& dvwaSessionGrab(); return isset( $dvwaSession[ 'php_ids' ] ); }
dvwaPhpIdsIsEnabled
用户登录
function dvwaLogin( $pUsername ) { $dvwaSession =& dvwaSessionGrab(); $dvwaSession['username'] = $pUsername; }
dvwaLogin
判断用户是否已经登录
function dvwaIsLoggedIn() { $dvwaSession =& dvwaSessionGrab(); return isset( $dvwaSession['username'] ); }
dvwaIsLoggedIn
用户退出,清除会话
function dvwaLogout() { $dvwaSession =& dvwaSessionGrab(); unset( $dvwaSession['username'] ); }
dvwaLogout
重新加载
function dvwaPageReload() { dvwaRedirect( $_SERVER[ 'PHP_SELF' ] ); }
dvwaPageReload
返回当前用户
function dvwaCurrentUser() { $dvwaSession =& dvwaSessionGrab(); return ( isset( $dvwaSession['username']) ? $dvwaSession['username'] : '') ; }
dvwaCurrentUser
初始化页面
function &dvwaPageNewGrab() { $returnArray = array(
'title' => 'Damn Vulnerable Web App (DVWA) v'.dvwaVersionGet().'',
'title_separator' => ' :: ',
'body' => '',
'page_id' => '',
'help_button' => '',
'source_button' => '',
); return $returnArray;
}
dvwaPageNewGrab
获取当前安全等级
function dvwaSecurityLevelGet() { return isset( $_COOKIE[ 'security' ] ) ? $_COOKIE[ 'security' ] : 'high'; }
dvwaSecurityLevelGet
设置安全等级
function dvwaSecurityLevelSet( $pSecurityLevel ) { setcookie( 'security', $pSecurityLevel ); }
dvwaSecurityLevelSet
启用消息函数,以压入栈的方式(数组)
// Start message functions --
function dvwaMessagePush( $pMessage ) { $dvwaSession =& dvwaSessionGrab(); if( !isset( $dvwaSession[ 'messages' ] ) ) { $dvwaSession[ 'messages' ] = array(); } $dvwaSession[ 'messages' ][] = $pMessage;
}
Start message functions
弹出消息,以出栈的方式
function dvwaMessagePop() { $dvwaSession =& dvwaSessionGrab(); if( !isset( $dvwaSession[ 'messages' ] ) || count( $dvwaSession[ 'messages' ] ) == 0 ) { return false; } return array_shift( $dvwaSession[ 'messages' ] );
}
dvwaMessagePop
以html的形式返回所以消息
function messagesPopAllToHtml() { $messagesHtml = ''; while( $message = dvwaMessagePop() ) { // TODO- sharpen! $messagesHtml .= "<div class=\"message\">{$message}</div>"; } return $messagesHtml;
}
messagesPopAllToHtml
。。
dvwa 源码分析(二) --- dvwaPage.inc.php分析的更多相关文章
- 如何分析SpringBoot源码模块及结构?--SpringBoot源码(二)
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 如何搭建自己的SpringBoot源码调试环境?--SpringBoot源码(一). 前面搭建好了自己本地的S ...
- Mybatis源码解析(二) —— 加载 Configuration
Mybatis源码解析(二) -- 加载 Configuration 正如上文所看到的 Configuration 对象保存了所有Mybatis的配置信息,也就是说mybatis-config. ...
- Dubbo源码学习(二)
@Adaptive注解 在上一篇ExtensionLoader的博客中记录了,有两种扩展点,一种是普通的扩展实现,另一种就是自适应的扩展点,即@Adaptive注解的实现类. @Documented ...
- RxJava2源码解析(二)
title: RxJava2源码解析(二) categories: 源码解析 tags: 源码解析 rxJava2 前言 本篇主要解析RxJava的线程切换的原理实现 subscribeOn 首先, ...
- Sentinel源码解析二(Slot总览)
写在前面 本文继续来分析Sentinel的源码,上篇文章对Sentinel的调用过程做了深入分析,主要涉及到了两个概念:插槽链和Node节点.那么接下来我们就根据插槽链的调用关系来依次分析每个插槽(s ...
- 手牵手,从零学习Vue源码 系列二(变化侦测篇)
系列文章: 手牵手,从零学习Vue源码 系列一(前言-目录篇) 手牵手,从零学习Vue源码 系列二(变化侦测篇) 陆续更新中... 预计八月中旬更新完毕. 1 概述 Vue最大的特点之一就是数据驱动视 ...
- Netty 源码(二)NioEventLoop 之 Channel 注册
Netty 源码(二)NioEventLoop 之 Channel 注册 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一 ...
- Zookeeper 源码(二)序列化组件 Jute
Zookeeper 源码(二)序列化组件 Jute 一.序列化组件 Jute 对于一个网络通信,首先需要解决的就是对数据的序列化和反序列化处理,在 ZooKeeper 中,使用了Jute 这一序列化组 ...
- 一点一点看JDK源码(二)java.util.List
一点一点看JDK源码(二)java.util.List liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 List译为表,一览表, ...
随机推荐
- Python之filter筛选数据工具
# -*- coding: utf-8 -*- #python 27 #xiaodeng #Python之filter筛选数据工具 #http://python.jobbole.com/82597/ ...
- openfire + spark 展示组织机构(客户端)
在spark 加一个插件用于展示组织机构, 参考了好多人的代码 插件主类增加一个 TAB用于展示机构树 package com.salesoa.orgtree; import java.net.URL ...
- RCF库ClientStub.setAutoReconnect
这个选项为false时,当连接断开时,第一次调用服务会抛出异常,而第二次调用时,也会自动连接.
- 如何理解并学习javascript中的面向对象(OOP) [转]
如果你想让你的javascript代码变得更加优美,性能更加卓越.或者,你想像jQuery的作者一样,写出属于自己优秀的类库(哪怕是基于 jquery的插件).那么,你请务必要学习javascript ...
- 1.Java基础-面向对象编程思想(封装继承多态接口)
封装: 1.定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别. 2.封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的 ...
- python练习笔记——编写一个装饰器,模拟登录的简单验证
编写一个装饰器,模拟登录的简单验证(至验证用户名和密码是否正确) 如果用户名为 root 密码为 123则正确,否则不正确.如果验证不通过则不执行被修饰函数 #编写一个装饰器,模拟登录的简单验证 #只 ...
- xcode 在哪里新建category、protocol等文件
1.和以前新建新文件一样.2.当然选IOS啦,不过OS X也有这个选项,然后Objctive-C File. 3.在File Type里选就OK啦.
- oc 目录结构
最顶级的oc2是一个项目名,下级的oc2下面的文件是一些程序文件(.m或者.h的文件)和一些界面文件(.xib或者storyboard文件),supporting files文件下面的是资源文件,可以 ...
- Workflow_标准控件Wait_For_Flow和Contiune_Flow的用法(案例)
2014-06-04 Created By BaoXinjian
- Linux内核同步 - memory barrier
一.前言 我记得以前上学的时候大家经常说的一个词汇叫做所见即所得,有些编程工具是所见即所得的,给程序员带来极大的方便.对于一个c程序员,我们的编写的代码能所见即所得吗?我们看到的c程序的逻辑是否就是最 ...