在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分析的更多相关文章

  1. 如何分析SpringBoot源码模块及结构?--SpringBoot源码(二)

    注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 如何搭建自己的SpringBoot源码调试环境?--SpringBoot源码(一). 前面搭建好了自己本地的S ...

  2. Mybatis源码解析(二) —— 加载 Configuration

    Mybatis源码解析(二) -- 加载 Configuration    正如上文所看到的 Configuration 对象保存了所有Mybatis的配置信息,也就是说mybatis-config. ...

  3. Dubbo源码学习(二)

    @Adaptive注解 在上一篇ExtensionLoader的博客中记录了,有两种扩展点,一种是普通的扩展实现,另一种就是自适应的扩展点,即@Adaptive注解的实现类. @Documented ...

  4. RxJava2源码解析(二)

    title: RxJava2源码解析(二) categories: 源码解析 tags: 源码解析 rxJava2 前言 本篇主要解析RxJava的线程切换的原理实现 subscribeOn 首先, ...

  5. Sentinel源码解析二(Slot总览)

    写在前面 本文继续来分析Sentinel的源码,上篇文章对Sentinel的调用过程做了深入分析,主要涉及到了两个概念:插槽链和Node节点.那么接下来我们就根据插槽链的调用关系来依次分析每个插槽(s ...

  6. 手牵手,从零学习Vue源码 系列二(变化侦测篇)

    系列文章: 手牵手,从零学习Vue源码 系列一(前言-目录篇) 手牵手,从零学习Vue源码 系列二(变化侦测篇) 陆续更新中... 预计八月中旬更新完毕. 1 概述 Vue最大的特点之一就是数据驱动视 ...

  7. Netty 源码(二)NioEventLoop 之 Channel 注册

    Netty 源码(二)NioEventLoop 之 Channel 注册 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一 ...

  8. Zookeeper 源码(二)序列化组件 Jute

    Zookeeper 源码(二)序列化组件 Jute 一.序列化组件 Jute 对于一个网络通信,首先需要解决的就是对数据的序列化和反序列化处理,在 ZooKeeper 中,使用了Jute 这一序列化组 ...

  9. 一点一点看JDK源码(二)java.util.List

    一点一点看JDK源码(二)java.util.List liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 List译为表,一览表, ...

随机推荐

  1. Redis学习(8)-redis其他特性

    消息订阅与发布 subscribe Channel:订阅频道 psubscribe channel*:批量订阅频道:例如:psubscribe S*,订阅以S开头的频道. publish channe ...

  2. 捕获Chrome浏览器全屏退出事件

    参考地址 document.addEventListener("fullscreenchange", function(e) { console.log("fullscr ...

  3. 分享一个php代码创建目录的Demo

    /* * 连续建目录 * string $dir 目录字符串 * int $mode 权限数字 * 返回:顺利创建或者全部已建返回true,其它方式返回false */ function makeDi ...

  4. xmlhttp.readyState==4 && xmlhttp.status==200的探究

    作为一个后端人员,很惭愧,对Ajax的使用只局限在功能实现层面的交互,对底层通过XMLHttpRequest对象来使用的知识却没有仔细研究过.现总结如下 1. XMLHttpRequest 对象的相关 ...

  5. 面试题 Comparable、Comparator 比较

    Comparable 用作默认的比较方式 Comparator 用作自定义的比较方式,当默认的比较方式不适用时或者没有提供默认的比较方式,使用Comparator就非常有用. 像Arrays和Coll ...

  6. 【LeetCode】22. Generate Parentheses (2 solutions)

    Generate Parentheses Given n pairs of parentheses, write a function to generate all combinations of ...

  7. 【LeetCode】50. Pow(x, n) (3 solutions)

    Pow(x, n) Implement pow(x, n). 按照定义做的O(n)肯定是TLE的. 利用这个信息:x2n = (xn)2 有个注意点,当n为负是,直接取反是不可行的. 由于int的表示 ...

  8. POJ 3006 Dirichlet's Theorem on Arithmetic Progressions (素数)

    Dirichlet's Theorem on Arithmetic Progressions Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  9. 深入理解Java:自定义java注解

    要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...

  10. 使用fork并发处理多个client的请求和对等通信p2p

    一.在前面讲过的回射客户/服务器程序中,服务器只能处理一个客户端的请求,如何同时服务多个客户端呢?在未讲到select/poll/epoll等高级IO之前,比较老土的办法是使用fork来实现.网络服务 ...