Changes between Version 2 and Version 3 of Documentation/Plugins/EncodeOutput


Ignore:
Timestamp:
03/14/18 09:13:13 (4 months ago)
Author:
gogo
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Documentation/Plugins/EncodeOutput

    v2 v3  
    55This plugin makes Xinha encode the edited HTML in one of several ways immediately prior to submitting it back to your server.  This is useful for avoiding "mod_security" issues where "mod_security" may detect HTML being submitted to your server and cancel the submission (typically with a 403 error). 
    66 
    7 Responsibility for **decoding** the encoded response when it hits your server is yours! 
     7The encoded text is prefixed with an indicator code so that you can determine which format it was encoded in when it hits your server. 
     8 
     9Responsibility for checking that prefix, removing it and **decoding** the encoded response when it hits your server is yours! 
     10 
     11A typical decoding would look like this in PHP 
     12 
     13{{{ 
     14    /** mod_security can be a pain, so sometimes we submit form fields as  
     15     *  an encoded form, typically rot13.  To identify this we use the  
     16     *  prefix ":!r13!:" 
     17     *  other methods are available... 
     18     *  //   r13   - input is rot13 (alphanum only is rotated)      -- prefix :!r13!: 
     19     *  //   b64   - input is base64 encoded                        -- prefix :!b64!: 
     20     *  //   64r   - input is base64 encoded and then that is rot13 -- prefix :!64r!: 
     21     *  //   r64   - inpuy is rot13 and then that is base64         -- prefix :!r64!: 
     22     */ 
     23      
     24    function unwrap_mod_security() 
     25    { 
     26      // trigger_error('Magic Quotes GPC is on, cleaning GPC.', E_USER_NOTICE); 
     27      $to_clean = array(&$_GET, &$_POST, &$_REQUEST, &$_COOKIE); 
     28      while(count($to_clean)) 
     29      { 
     30        $junk = array_keys($to_clean); 
     31        $cleanKey = array_pop($junk); 
     32        $cleaning =& $to_clean[$cleanKey];           
     33        unset($to_clean[$cleanKey]); 
     34        foreach(array_keys($cleaning) as $k) 
     35        {           
     36          // If the key is encoded, decode it 
     37          if(preg_match('/^:![a-z0-9]{3,3}!:/', $k, $M)) 
     38          { 
     39            $j = (string) substr($k, 7); 
     40            switch($M[1]) 
     41            { 
     42              case ':!r13!:': 
     43                $j = str_rot13($j); 
     44              break;            
     45               
     46              case ':!b64!:': 
     47                $j = base64_decode($j); 
     48              break;           
     49               
     50              case ':!r64!:': 
     51                $j = str_rot13(base64_decode($j)); 
     52                break; 
     53                 
     54              case ':!64r!:': 
     55                $j = base64_decode(str_rot13($j)); 
     56                break;               
     57            } 
     58             
     59            $cleaning[$j] =& $cleaning[$k]; 
     60            unset($cleaning[$k]); 
     61            $k = $j; 
     62          } 
     63           
     64          if(is_array($cleaning[$k])) 
     65          { 
     66            $to_clean[] =& $cleaning[$k]; 
     67          } 
     68          else 
     69          { 
     70            // If the value is encoded, decode it 
     71            if(preg_match('/^(:![a-z0-9]{3,3}!:)/', $cleaning[$k], $M)) 
     72            { 
     73              $cleaning[$k] = (string) substr($cleaning[$k], 7); 
     74              switch($M[1]) 
     75              { 
     76                case ':!r13!:': 
     77                  $cleaning[$k] = str_rot13($cleaning[$k]); 
     78                break; 
     79                  
     80                case ':!b64!:': 
     81                  $cleaning[$k] = base64_decode($cleaning[$k]); 
     82                break;           
     83                 
     84                case ':!r64!:': 
     85                  $cleaning[$k] = str_rot13(base64_decode($cleaning[$k])); 
     86                  break; 
     87                   
     88                case ':!64r!:': 
     89                  $cleaning[$k] = base64_decode(str_rot13($cleaning[$k])); 
     90                  break;               
     91                 
     92                default: 
     93                  echo "Unknown encoded form {$M[1]}"; 
     94                  exit; 
     95                  break; 
     96              } 
     97            } 
     98          } 
     99        } 
     100      } 
     101    } 
     102}}} 
    8103 
    9104== Configuration ==