PHPIDS
Current file: /home/lstrojny/Projekte/php-ids/trunk/lib/IDS/Report.php
Legend: executed not executed dead code

  Coverage
  Classes Methods Lines
Total
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 13 / 13
86.08 %86.08%
86.08% 68 / 79
 
IDS_Report
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 13 / 13
86.08 %86.08%
86.08% 68 / 79
 public function __construct(array $events = NULL)
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 6 / 6
 public function addEvent(IDS_Event $event)
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 3 / 3
 public function getEvent($name)
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 6 / 6
 public function getTags()
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 9 / 9
 public function getImpact()
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 7 / 7
 public function hasEvent($name)
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 3 / 3
 public function count()
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 1 / 1
 public function getIterator()
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 1 / 1
 public function isEmpty()
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 1 / 1
 protected function clear()
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 3 / 3
 public function getCentrifuge()
100.00 %100.00%
100.00% 1 / 1
100.00 %100.00%
100.00% 2 / 2
 public function setCentrifuge($centrifuge = array ( ))
100.00 %100.00%
100.00% 1 / 1
75.00 %75.00%
75.00% 3 / 4
 public function __toString()
100.00 %100.00%
100.00% 1 / 1
69.70 %69.70%
69.70% 23 / 33


       1                 : <?php                                                                             
       2                 :                                                                                   
       3                 : /**                                                                               
       4                 :  * PHPIDS                                                                         
       5                 :  *                                                                                
       6                 :  * Requirements: PHP5, SimpleXML                                                  
       7                 :  *                                                                                
       8                 :  * Copyright (c) 2008 PHPIDS group (http://php-ids.org)                           
       9                 :  *                                                                                
      10                 :  * PHPIDS is free software; you can redistribute it and/or modify                 
      11                 :  * it under the terms of the GNU Lesser General Public License as published by    
      12                 :  * the Free Software Foundation, version 3 of the License, or                     
      13                 :  * (at your option) any later version.                                            
      14                 :  *                                                                                
      15                 :  * PHPIDS is distributed in the hope that it will be useful,                      
      16                 :  * but WITHOUT ANY WARRANTY; without even the implied warranty of                 
      17                 :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                   
      18                 :  * GNU Lesser General Public License for more details.                            
      19                 :  *                                                                                
      20                 :  * You should have received a copy of the GNU Lesser General Public License       
      21                 :  * along with PHPIDS. If not, see <http://www.gnu.org/licenses/>.                 
      22                 :  *                                                                                
      23                 :  * PHP version 5.1.6+                                                             
      24                 :  *                                                                                
      25                 :  * @category Security                                                             
      26                 :  * @package  PHPIDS                                                               
      27                 :  * @author   Mario Heiderich <mario.heiderich@gmail.com>                          
      28                 :  * @author   Christian Matthies <ch0012@gmail.com>                                
      29                 :  * @author   Lars Strojny <lars@strojny.net>                                      
      30                 :  * @license  http://www.gnu.org/licenses/lgpl.html LGPL                           
      31                 :  * @link     http://php-ids.org/                                                  
      32                 :  */                                                                               
      33                 :                                                                                   
      34                 : /**                                                                               
      35                 :  * PHPIDS report object                                                           
      36                 :  *                                                                                
      37                 :  * The report objects collects a number of events and thereby presents the        
      38                 :  * detected results. It provides a convenient API to work with the results.       
      39                 :  *                                                                                
      40                 :  * Note that this class implements Countable, IteratorAggregate and               
      41                 :  * a __toString() method                                                          
      42                 :  *                                                                                
      43                 :  * @category  Security                                                            
      44                 :  * @package   PHPIDS                                                              
      45                 :  * @author    Christian Matthies <ch0012@gmail.com>                               
      46                 :  * @author    Mario Heiderich <mario.heiderich@gmail.com>                         
      47                 :  * @author    Lars Strojny <lars@strojny.net>                                     
      48                 :  * @copyright 2007 The PHPIDS Group                                               
      49                 :  * @license   http://www.gnu.org/licenses/lgpl.html LGPL                          
      50                 :  * @version   Release: $Id:Report.php 517 2007-09-15 15:04:13Z mario $            
      51                 :  * @link      http://php-ids.org/                                                 
      52                 :  */                                                                               
      53                 : class IDS_Report implements Countable, IteratorAggregate                          
      54                 : {                                                                                 
      55                 :                                                                                   
      56                 :     /**                                                                           
      57                 :      * Event container                                                            
      58                 :      *                                                                            
      59                 :      * @var array                                                                 
      60                 :      */                                                                           
      61                 :     protected $events = array();                                                  
      62                 :                                                                                   
      63                 :     /**                                                                           
      64                 :      * List of affected tags                                                      
      65                 :      *                                                                            
      66                 :      * This list of tags is collected from the collected event objects on         
      67                 :      * demand when IDS_Report->getTags() is called                                
      68                 :      *                                                                            
      69                 :      * @var    array                                                              
      70                 :      */                                                                           
      71                 :     protected $tags = array();                                                    
      72                 :                                                                                   
      73                 :     /**                                                                           
      74                 :      * Impact level                                                               
      75                 :      *                                                                            
      76                 :      * The impact level is calculated on demand by adding the results of the      
      77                 :      * event objects on IDS_Report->getImpact()                                   
      78                 :      *                                                                            
      79                 :      * @var integer                                                               
      80                 :      */                                                                           
      81                 :     protected $impact = 0;                                                        
      82                 :                                                                                   
      83                 :     /**                                                                           
      84                 :      * Centrifuge data                                                            
      85                 :      *                                                                            
      86                 :      * This variable - initiated as an empty array - carries all information      
      87                 :      * about the centrifuge data if available                                     
      88                 :      *                                                                            
      89                 :      * @var array                                                                 
      90                 :      */                                                                           
      91                 :     protected $centrifuge = array();                                              
      92                 :                                                                                   
      93                 :     /**                                                                           
      94                 :      * Constructor                                                                
      95                 :      *                                                                            
      96                 :      * @param array $events the events the report should include                  
      97                 :      *                                                                            
      98                 :      * @return void                                                               
      99                 :      */                                                                           
     100                 :     public function __construct(array $events = null)                             
     101                 :     {                                                                             
     102              59 :         if ($events) {                                                            
     103              19 :             foreach ($events as $event) {                                         
     104              19 :                 $this->addEvent($event);                                          
     105              19 :             }                                                                     
     106              19 :         }                                                                         
     107              59 :     }                                                                             
     108                 :                                                                                   
     109                 :     /**                                                                           
     110                 :      * Adds an IDS_Event object to the report                                     
     111                 :      *                                                                            
     112                 :      * @param object $event IDS_Event                                             
     113                 :      *                                                                            
     114                 :      * @return object $this                                                       
     115                 :      */                                                                           
     116                 :     public function addEvent(IDS_Event $event)                                    
     117                 :     {                                                                             
     118              52 :         $this->clear();                                                           
     119              52 :         $this->events[$event->getName()] = $event;                                
     120                 :                                                                                   
     121              52 :         return $this;                                                             
     122                 :     }                                                                             
     123                 :                                                                                   
     124                 :     /**                                                                           
     125                 :      * Get event by name                                                          
     126                 :      *                                                                            
     127                 :      * In most cases an event is identified by the key of the variable that       
     128                 :      * contained maliciously appearing content                                    
     129                 :      *                                                                            
     130                 :      * @param scalar $name the event name                                         
     131                 :      *                                                                            
     132                 :      * @throws InvalidArgumentException if argument is invalid                    
     133                 :      * @return mixed IDS_Event object or false if the event does not exist        
     134                 :      */                                                                           
     135                 :     public function getEvent($name)                                               
     136                 :     {                                                                             
     137               5 :         if (!is_scalar($name)) {                                                  
     138               1 :             throw new InvalidArgumentException(                                   
     139                 :                 'Invalid argument type given'                                     
     140               1 :             );                                                                    
     141                 :         }                                                                         
     142                 :                                                                                   
     143               4 :         if ($this->hasEvent($name)) {                                             
     144               3 :             return $this->events[$name];                                          
     145                 :         }                                                                         
     146                 :                                                                                   
     147               1 :         return false;                                                             
     148                 :     }                                                                             
     149                 :                                                                                   
     150                 :     /**                                                                           
     151                 :      * Returns list of affected tags                                              
     152                 :      *                                                                            
     153                 :      * @return array                                                              
     154                 :      */                                                                           
     155                 :     public function getTags()                                                     
     156                 :     {                                                                             
     157               3 :         if (!$this->tags) {                                                       
     158               3 :             $this->tags = array();                                                
     159                 :                                                                                   
     160               3 :             foreach ($this->events as $event) {                                   
     161               3 :                 $this->tags = array_merge($this->tags,                            
     162               3 :                                           $event->getTags());                     
     163               3 :             }                                                                     
     164                 :                                                                                   
     165               3 :             $this->tags = array_values(array_unique($this->tags));                
     166               3 :         }                                                                         
     167                 :                                                                                   
     168               3 :         return $this->tags;                                                       
     169                 :     }                                                                             
     170                 :                                                                                   
     171                 :     /**                                                                           
     172                 :      * Returns total impact                                                       
     173                 :      *                                                                            
     174                 :      * Each stored IDS_Event object and its IDS_Filter sub-object are called      
     175                 :      * to calculate the overall impact level of this request                      
     176                 :      *                                                                            
     177                 :      * @return integer                                                            
     178                 :      */                                                                           
     179                 :     public function getImpact()                                                   
     180                 :     {                                                                             
     181              36 :         if (!$this->impact) {                                                     
     182              36 :             $this->impact = 0;                                                    
     183              36 :             foreach ($this->events as $event) {                                   
     184              34 :                 $this->impact += $event->getImpact();                             
     185              36 :             }                                                                     
     186              36 :         }                                                                         
     187                 :                                                                                   
     188              36 :         return $this->impact;                                                     
     189                 :     }                                                                             
     190                 :                                                                                   
     191                 :     /**                                                                           
     192                 :      * Checks if a specific event with given name exists                          
     193                 :      *                                                                            
     194                 :      * @param scalar $name the event name                                         
     195                 :      *                                                                            
     196                 :      * @throws InvalidArgumentException if argument is illegal                    
     197                 :      *                                                                            
     198                 :      * @return boolean                                                            
     199                 :      */                                                                           
     200                 :     public function hasEvent($name)                                               
     201                 :     {                                                                             
     202              11 :         if (!is_scalar($name)) {                                                  
     203               1 :             throw new InvalidArgumentException('Invalid argument given');         
     204                 :         }                                                                         
     205                 :                                                                                   
     206              10 :         return isset($this->events[$name]);                                       
     207                 :     }                                                                             
     208                 :                                                                                   
     209                 :     /**                                                                           
     210                 :      * Returns total amount of events                                             
     211                 :      *                                                                            
     212                 :      * @return integer                                                            
     213                 :      */                                                                           
     214                 :     public function count()                                                       
     215                 :     {                                                                             
     216               1 :         return count($this->events);                                              
     217                 :     }                                                                             
     218                 :                                                                                   
     219                 :      /**                                                                          
     220                 :      * Return iterator object                                                     
     221                 :      *                                                                            
     222                 :      * In order to provide the possibility to directly iterate over the           
     223                 :      * IDS_Event object the IteratorAggregate is implemented. One can easily      
     224                 :      * use foreach() to iterate through all stored IDS_Event objects.             
     225                 :      *                                                                            
     226                 :      * @return Iterator                                                           
     227                 :      */                                                                           
     228                 :     public function getIterator()                                                 
     229                 :     {                                                                             
     230               1 :         return new ArrayObject($this->events);                                    
     231                 :     }                                                                             
     232                 :                                                                                   
     233                 :     /**                                                                           
     234                 :      * Checks if any events are registered                                        
     235                 :      *                                                                            
     236                 :      * @return boolean                                                            
     237                 :      */                                                                           
     238                 :     public function isEmpty()                                                     
     239                 :     {                                                                             
     240               4 :         return empty($this->events);                                              
     241                 :     }                                                                             
     242                 :                                                                                   
     243                 :     /**                                                                           
     244                 :      * Clears calculated/collected values                                         
     245                 :      *                                                                            
     246                 :      * @return void                                                               
     247                 :      */                                                                           
     248                 :     protected function clear()                                                    
     249                 :     {                                                                             
     250              52 :         $this->impact = 0;                                                        
     251              52 :         $this->tags   = array();                                                  
     252              52 :     }                                                                             
     253                 :                                                                                   
     254                 :     /**                                                                           
     255                 :      * This method returns the centrifuge property or null if not                 
     256                 :      * filled with data                                                           
     257                 :      *                                                                            
     258                 :      * @return array/null                                                         
     259                 :      */                                                                           
     260                 :     public function getCentrifuge()                                               
     261                 :     {                                                                             
     262               1 :         return ($this->centrifuge && count($this->centrifuge) > 0)                
     263               1 :             ? $this->centrifuge : null;                                           
     264                 :     }                                                                             
     265                 :                                                                                   
     266                 :     /**                                                                           
     267                 :      * This method sets the centrifuge property                                   
     268                 :      *                                                                            
     269                 :      * @param array $centrifuge the centrifuge data                               
     270                 :      *                                                                            
     271                 :      * @throws InvalidArgumentException if argument is illegal                    
     272                 :      *                                                                            
     273                 :      * @return boolean true is arguments were valid                               
     274                 :      */                                                                           
     275                 :     public function setCentrifuge($centrifuge = array())                          
     276                 :     {                                                                             
     277              18 :         if (is_array($centrifuge) && $centrifuge) {                               
     278              18 :             $this->centrifuge = $centrifuge;                                      
     279              18 :             return true;                                                          
     280                 :         }                                                                         
     281               0 :         throw new InvalidArgumentException('Invalid argument given');             
     282                 :     }                                                                             
     283                 :                                                                                   
     284                 :     /**                                                                           
     285                 :      * Directly outputs all available information                                 
     286                 :      *                                                                            
     287                 :      * @return string                                                             
     288                 :      */                                                                           
     289                 :     public function __toString()                                                  
     290                 :     {                                                                             
     291               2 :         if (!$this->isEmpty()) {                                                  
     292               1 :             $output  = '';                                                        
     293               1 :             $output .= 'Total impact: ' . $this->getImpact() . "<br/>\n";         
     294               1 :             $output .= 'Affected tags: ' . join(', ', $this->getTags()) .         
     295               1 :                 "<br/>\n";                                                        
     296                 :                                                                                   
     297               1 :             foreach ($this->events as $event) {                                   
     298                 :                 $output .= "<br/>\nVariable: " .                                  
     299               1 :                     htmlspecialchars($event->getName()) . ' | Value: ' .          
     300               1 :                     htmlspecialchars($event->getValue()) . "<br/>\n";             
     301               1 :                 $output .= 'Impact: ' . $event->getImpact() . ' | Tags: ' .       
     302               1 :                     join(', ', $event->getTags()) . "<br/>\n";                    
     303                 :                                                                                   
     304               1 :                 foreach ($event as $filter) {                                     
     305               1 :                     $output .= 'Description: ' . $filter->getDescription() .      
     306               1 :                         ' | ';                                                    
     307               1 :                     $output .= 'Tags: ' . join(', ', $filter->getTags()) .        
     308               1 :                         ' | ';                                                    
     309               1 :                     $output .= 'ID: ' . $filter->getId() .                        
     310               1 :                         "<br/>\n";                                                
     311               1 :                 }                                                                 
     312               1 :             }                                                                     
     313                 :                                                                                   
     314               1 :             $output .= '<br/>';                                                   
     315                 :                                                                                   
     316               1 :             if ($centrifuge = $this->getCentrifuge()) {                           
     317               0 :                 $output .= 'Centrifuge detection data';                           
     318                 :                 $output .= '<br/>  Threshold: ' .                                 
     319               0 :                     ((isset($centrifuge['threshold'])&&$centrifuge['threshold']) ?
     320               0 :                     $centrifuge['threshold'] : '---');                            
     321                 :                 $output .= '<br/>  Ratio: ' .                                     
     322               0 :                     ((isset($centrifuge['ratio'])&&$centrifuge['ratio']) ?        
     323               0 :                     $centrifuge['ratio'] : '---');                                
     324               0 :                 if(isset($centrifuge['converted'])) {                             
     325               0 :                     $output .= '<br/>  Converted: ' . $centrifuge['converted'];   
     326               0 :                 }                                                                 
     327               0 :                 $output .= "<br/><br/>\n";                                        
     328               0 :             }                                                                     
     329               1 :         }                                                                         
     330                 :                                                                                   
     331               2 :         return isset($output) ? $output : '';                                     
     332                 :     }                                                                             
     333                 : }                                                                                 
     334                 :                                                                                   
     335                 : /*                                                                                
     336                 :  * Local variables:                                                               
     337                 :  * tab-width: 4                                                                   
     338                 :  * c-basic-offset: 4                                                              
     339                 :  * End:                                                                           
     340                 :  */                                                                               

Generated by PHPUnit 3.3.1 and Xdebug 2.1.0-dev at Mon Dec 22 13:57:42 CET 2008.