根据文件名就知道是IDS相关的

  1. <?php
  2.  
  3. if( !defined( 'DVWA_WEB_PAGE_TO_ROOT' ) ) {
  4. define( 'DVWA System error- WEB_PAGE_TO_ROOT undefined' );
  5. exit;
  6. }
  7.  
  8. define( 'DVWA_WEB_ROOT_TO_PHPIDS', 'external/phpids/'.dvwaPhpIdsVersionGet().'/' );
  9. define( 'DVWA_WEB_PAGE_TO_PHPIDS', DVWA_WEB_PAGE_TO_ROOT.DVWA_WEB_ROOT_TO_PHPIDS );
  10.  
  11. // Add PHPIDS to include path
  12. set_include_path( get_include_path().PATH_SEPARATOR.DVWA_WEB_PAGE_TO_PHPIDS.'lib/' );
  13.  
  14. require_once 'IDS/Init.php';
  15.  
  16. function dvwaPhpIdsVersionGet() {
  17. return '0.6';
  18. }

我们先分析前面的18行

3-6行就是一个是否已定义的判断,在前面我们已经分析过了,这里不再复述。

8-9行定义一个新目录变量,这样就可以更方面的包含目录或文件了。

第8行的dvwaPhpIdsVersionGet()函数在16行定义,返回PhpIds的版本号。

第12行的set_include_path表示包含文件路径,这样做的目的是包含文件的时候可以省略文件路径,直接使用文件名。

第14行又包含一个新的文件,这个文件是在set_include_path的基础上包含的。这里我就不继续分析下去了,因为越分析文件会更多。

下面是几个函数

我们来第一个函数

  1. // PHPIDS Log parsing function
  2. function dvwaReadIdsLog() {
  3.  
  4. $file_array = file(DVWA_WEB_PAGE_TO_PHPIDS_LOG);
  5.  
  6. $data = '';
  7.  
  8. foreach ($file_array as $line_number => $line){
  9. $line = explode(",", $line);
  10. $line = str_replace("\""," ",$line);
  11.  
  12. $datetime = $line[1];
  13. $vulnerability = $line[3];
  14. $variable = urldecode($line[4]);
  15. $request = urldecode($line[5]);
  16. $ip = $line[6];
  17.  
  18. $data .= "<div id=\"idslog\"><b>Date/Time:</b> " . $datetime . "<br /><b>Vulnerability:</b> " . $vulnerability . "<br /><b>Request:</b> " . htmlspecialchars($request) . "<br /><b>Variable:</b> " . htmlspecialchars($variable) . "<br /><b>IP:</b> " . $ip . "</div>";
  19. }
  20.  
  21. return $data;
  22. }

PHPIDS 日志解析函数

第二个函数

  1. // Clear PHPIDS log
  2. function dvwaClearIdsLog() {
  3. if (isset($_GET['clear_log'])) {
  4. $fp = fopen(DVWA_WEB_PAGE_TO_PHPIDS_LOG, w);
  5. fclose($fp);
  6. dvwaMessagePush( "PHPIDS log cleared" );
  7. dvwaPageReload();
  8. }
  9. }

PHPIDS 日志清理

第三个函数

  1. // Main PHPIDS function
  2. function dvwaPhpIdsTrap() {
  3. try {
  4. $request = array(
  5. 'REQUEST' => $_REQUEST,
  6. 'GET' => $_GET,
  7. 'POST' => $_POST,
  8. 'COOKIE' => $_COOKIE
  9. );
  10.  
  11. $init = IDS_Init::init( DVWA_WEB_PAGE_TO_PHPIDS.'lib/IDS/Config/Config.ini' );
  12.  
  13. $init->config['General']['base_path'] = DVWA_WEB_PAGE_TO_PHPIDS.'lib/IDS/';
  14. $init->config['General']['use_base_path'] = true;
  15. $init->config['Caching']['caching'] = 'none';
  16.  
  17. // 2. Initiate the PHPIDS and fetch the results
  18. $ids = new IDS_Monitor( $request, $init );
  19. $result = $ids->run();
  20.  
  21. if (!$result->isEmpty()) {
  22. require_once 'IDS/Log/File.php';
  23. require_once 'IDS/Log/Composite.php';
  24.  
  25. $compositeLog = new IDS_Log_Composite();
  26. $compositeLog->addLogger(IDS_Log_File::getInstance($init));
  27.  
  28. $compositeLog->execute($result);
  29.  
  30. echo 'Hacking attempt detected and logged.';
  31.  
  32. //echo $result;
  33. exit;
  34. }
  35. } catch (Exception $e) {
  36. /*
  37. * something went terribly wrong - maybe the
  38. * filter rules weren't found?
  39. */
  40. printf(
  41. 'An error occured: %s',
  42. $e->getMessage()
  43. );
  44. }
  45. }

PHPIDS 主函数

这个文件就分析完了,我们回到dvwaPage.inc.php。

dvwa 源码分析(四) --- dvwaPhpIds.inc.php分析的更多相关文章

  1. dvwa 源码分析(二) --- dvwaPage.inc.php分析

    在setup.php中,包含了这个文件,所以这里分析这个文件. <?php if( !defined( 'DVWA_WEB_PAGE_TO_ROOT' ) ) { define( 'DVWA S ...

  2. Mybatis源码解析(四) —— SqlSession是如何实现数据库操作的?

    Mybatis源码解析(四) -- SqlSession是如何实现数据库操作的?   如果拿一次数据库请求操作做比喻,那么前面3篇文章就是在做请求准备,真正执行操作的是本篇文章要讲述的内容.正如标题一 ...

  3. Sentinel源码解析四(流控策略和流控效果)

    引言 在分析Sentinel的上一篇文章中,我们知道了它是基于滑动窗口做的流量统计,那么在当我们能够根据流量统计算法拿到流量的实时数据后,下一步要做的事情自然就是基于这些数据做流控.在介绍Sentin ...

  4. 40 网络相关函数(八)——live555源码阅读(四)网络

    40 网络相关函数(八)——live555源码阅读(四)网络 40 网络相关函数(八)——live555源码阅读(四)网络 简介 15)writeSocket向套接口写数据 TTL的概念 函数send ...

  5. 39 网络相关函数(七)——live555源码阅读(四)网络

    39 网络相关函数(七)——live555源码阅读(四)网络 39 网络相关函数(七)——live555源码阅读(四)网络 简介 14)readSocket从套接口读取数据 recv/recvfrom ...

  6. 38 网络相关函数(六)——live555源码阅读(四)网络

    38 网络相关函数(六)——live555源码阅读(四)网络 38 网络相关函数(六)——live555源码阅读(四)网络 简介 12)makeSocketNonBlocking和makeSocket ...

  7. 37 网络相关函数(五)——live555源码阅读(四)网络

    37 网络相关函数(五)——live555源码阅读(四)网络 37 网络相关函数(五)——live555源码阅读(四)网络 简介 10)MAKE_SOCKADDR_IN构建sockaddr_in结构体 ...

  8. 36 网络相关函数(四)——live555源码阅读(四)网络

    36 网络相关函数(四)——live555源码阅读(四)网络 36 网络相关函数(四)——live555源码阅读(四)网络 简介 7)createSocket创建socket方法 8)closeSoc ...

  9. 35 网络相关函数(三)——live555源码阅读(四)网络

    35 网络相关函数(三)——live555源码阅读(四)网络 35 网络相关函数(三)——live555源码阅读(四)网络 简介 5)NoReuse不重用地址类 6)initializeWinsock ...

随机推荐

  1. 腾讯云-NGINX搭建静态网站

    搭建静态网站 搭建Http静态服务器环境 任务时间:15min ~ 30min 搭建静态网站,首先需要部署环境.下面的步骤,将告诉大家如何在服务器上通过 Nginx 部署 HTTP 静态服务. 00. ...

  2. 【微信小程序】:客服消息教程

    1.本教程完全链接W3Cschool的教程,已经讲的非常清晰和透彻. 2.链接:https://www.w3cschool.cn/weixinapp/weixinapp-api-custommsg-c ...

  3. mybatis&Hibernate区别

    mybatis是一个不完全的orm框架,因为mybatis需要程序员自己写大量的sql,需要程序员对sql的掌握比较高,不过mybatis可以通过xml文件可以灵活的配置要运行的sql语句,将sql与 ...

  4. HDUOJ-----2175取(m堆)石子游戏

    取(m堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  5. UE 技巧

    http://cache.baiducontent.com/c?m=9d78d513d98416b8599d830e7c01a7170e2585744ddcc4523f8a9c12d522195646 ...

  6. ubuntu 安装php-redis

    sudo apt-get install redis-server 测试redis是否安装成功:注意:要开启redisredis-cliset test helloOKget test"ba ...

  7. CentOS 6.7下配置 yum 安装 Nginx。

    第一步,在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo: cd /etc/yum.repos.d/ vim nginx.repo 填写如下内容: [nginx]nam ...

  8. C# -- 等待异步操作执行完成的方式 C# -- 使用委托 delegate 执行异步操作 JavaScript -- 原型:prototype的使用 DBHelper类连接数据库 MVC View中获取action、controller、area名称、参数

    C# -- 等待异步操作执行完成的方式 C# -- 等待异步操作执行完成的方式 1. 等待异步操作的完成,代码实现: class Program { static void Main(string[] ...

  9. Linux常见的进程调度算法

    进程调度:在操作系统中调度是指一种资源分配. 调度算法是指: 根据系统的资源分配策略所规定的资源分配算法. 操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源 ...

  10. 【JUnit4.10源码分析】3.4 Description与測试树

    Description使用组合模式描写叙述一个測试树.组合模式中全部元素都是Composite对象. Description有成员变量private final ArrayList<Descri ...