Subversion Repositories personal-webbase

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. <?php
  2.  
  3. if (!defined('WBLEGAL')) die('Kann nicht ohne Personal WebBase ausgef&uuml;hrt werden.');
  4.  
  5. // In PWB-Arbeitsverzeichnis wandern
  6. $olddir = getcwd();
  7. chdir('../../../');
  8.  
  9. // Schlecht wegen dem Gleichrichter
  10. // include 'includes/main.inc.php';
  11.  
  12. include 'includes/configmanager.class.php';
  13. include 'includes/functions.inc.php';
  14.  
  15. $WBConfig = new WBConfigManager();
  16. $WBConfig->init(); // Hier findet ein include statt, deswegen bleiben wir im PWB-Arbeitsverzeichnis
  17.  
  18. chdir($olddir);
  19. unset($olddir);
  20.  
  21. // http://www.php.net/manual/en/function.realpath.php#57016
  22. function cleanPath($path) {
  23.     $result = array();
  24.     // $pathA = preg_split('/[\/\\\]/', $path);
  25.     $pathA = explode('/', $path);
  26.     if (!$pathA[0])
  27.         $result[] = '';
  28.     foreach ($pathA AS $key => $dir) {
  29.         if ($dir == '..') {
  30.             if (end($result) == '..') {
  31.                 $result[] = '..';
  32.             } elseif (!array_pop($result)) {
  33.                 $result[] = '..';
  34.             }
  35.         } elseif ($dir && $dir != '.') {
  36.             $result[] = $dir;
  37.         }
  38.     }
  39.     if (!end($pathA))
  40.         $result[] = '';
  41.     return implode('/', $result);
  42. }
  43.  
  44. define('RELATIVE_DIR2', cleanPath(RELATIVE_DIR.'../../../'));
  45.  
  46. // Wird Umleitung nach HTTPS erzwungen?
  47.  
  48.         if ($WBConfig->getForceSSLFlag())
  49.         {
  50.                 @ini_set('session.cookie_secure', 1);
  51.  
  52.                 // Wenn keine SSL Verbindung da, dann zu SSL umleiten
  53.                 if (!isset($_SERVER['HTTPS']) || (strtolower($_SERVER['HTTPS']) != 'on'))
  54.                 {
  55.                         wb_redirect_now('https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
  56.                 }
  57.         }
  58.  
  59. // Backup der Einstellungen
  60.  
  61. $backup_session_save_handler = @ini_get('session.save_handler');
  62.  
  63. // Personal WebBase-Spezifischer Session-Abschnitt
  64.  
  65. // http://de3.php.net/md5: Alexander Valyalkin
  66.  
  67. /* function get_rnd_iv($iv_len)
  68. {
  69.         $iv = '';
  70.         while ($iv_len-- > 0) {
  71.                 $iv .= chr(mt_rand() & 0xff);
  72.         }
  73.         return $iv;
  74. }
  75.  
  76. function wb_encrypt($plain_text, $password, $iv_len = 16)
  77. {
  78.         $plain_text .= "\x13";
  79.         $n = strlen($plain_text);
  80.         if ($n % 16) $plain_text .= str_repeat("\0", 16 - ($n % 16));
  81.         $i = 0;
  82.         $enc_text = get_rnd_iv($iv_len);
  83.         $iv = substr($password ^ $enc_text, 0, 512);
  84.         while ($i < $n) {
  85.                 $block = substr($plain_text, $i, 16) ^ pack('H*', md5($iv));
  86.                 $enc_text .= $block;
  87.                 $iv = substr($block . $iv, 0, 512) ^ $password;
  88.                 $i += 16;
  89.         }
  90.         return base64_encode($enc_text);
  91. }
  92.  
  93. function wb_decrypt($enc_text, $password, $iv_len = 16)
  94. {
  95.         $enc_text = base64_decode($enc_text);
  96.         $n = strlen($enc_text);
  97.         $i = $iv_len;
  98.         $plain_text = '';
  99.         $iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512);
  100.         while ($i < $n) {
  101.                 $block = substr($enc_text, $i, 16);
  102.                 $plain_text .= $block ^ pack('H*', md5($iv));
  103.                 $iv = substr($block . $iv, 0, 512) ^ $password;
  104.                 $i += 16;
  105.         }
  106.         return preg_replace('/\\x13\\x00*$/', '', $plain_text);
  107. } */
  108.  
  109. global $WBConfig;
  110.  
  111. if ($WBConfig->getLockFlag())
  112. {
  113.         die('<h1>Personal WebBase ist gesperrt</h1>Die Variable &quot;$lock&quot; in &quot;includes/config.inc.php&quot; steht auf 1 bzw. true. Setzen Sie diese Variable erst auf 0, wenn das Hochladen der Dateien beim Installations- bzw. Updateprozess beendet ist. Wenn Sie Personal WebBase freigeben, bevor der Upload abgeschlossen ist, kann es zu einer Besch&auml;digung der Kundendatenbank kommen!');
  114. }
  115.  
  116. @session_cache_limiter('private');
  117. @ini_set('session.cookie_path', RELATIVE_DIR2);
  118. //@ini_set('session.cookie_domain', $_SERVER['HTTP_HOST']);
  119. //@session_set_cookie_params(0, RELATIVE_DIR2, $_SERVER['HTTP_HOST'], $WBConfig->getForceSSLFlag());
  120.  
  121. //@ini_set('session.auto_start', 0);
  122. @ini_set('session.cache_expire', 180);
  123. @ini_set('session.use_trans_sid', 0);
  124. @ini_set('session.use_cookies', 1);
  125. @ini_set('session.use_only_cookies', 1);
  126. @ini_set('session.cookie_secure', $WBConfig->getForceSSLFlag());
  127. @ini_set('session.cookie_lifetime', 0);
  128. @ini_set('session.gc_maxlifetime', 1440);
  129. @ini_set('session.bug_compat_42', 0);
  130. @ini_set('session.bug_compat_warn', 1);
  131. if (version_compare(PHP_VERSION, '5.0.0', 'ge') && substr(PHP_OS, 0, 3) != 'WIN')
  132. {
  133.         @ini_set('session.hash_function', 1);
  134.         @ini_set('session.hash_bits_per_character', 6);
  135. }
  136. @ini_set('session.save_handler', 'user');
  137. // @ini_set('session.save_path', '../../../includes/session/');
  138. // @ini_set('arg_separator.output', '&amp;');
  139. // @ini_set('url_rewriter.tags', 'a=href,area=href,frame=src,input=src,fieldset=');
  140.  
  141. $wb_session_name = 'webbase';
  142.  
  143. @session_unset();
  144. @session_destroy();
  145.  
  146. // wb_newdatabasetable('sessions', $m2, 'session_id', "varchar(255) NOT NULL",
  147. //                                      'last_updated', "datetime NOT NULL",
  148. //                                      'data_value', "text");
  149.  
  150. function sessao_open($aSavaPath, $aSessionName)
  151. {
  152.         sessao_gc( ini_get('session.gc_maxlifetime') );
  153.         return True;
  154. }
  155.  
  156. function sessao_close()
  157. {
  158.         return True;
  159. }
  160.  
  161. function sessao_read( $aKey )
  162. {
  163.         global $WBConfig;
  164.  
  165.         $wb_conn = @mysql_connect($WBConfig->getMySQLServer(), $WBConfig->getMySQLUsername(), $WBConfig->getMySQLPassword());
  166.         $wb_selc = @mysql_select_db($WBConfig->getMySQLDatabase(), $wb_conn);
  167.  
  168.         $busca = mysql_query("SELECT `data_value` FROM `".$WBConfig->getMySQLPrefix()."sessions` WHERE `session_id` = '".mysql_real_escape_string($aKey)."'");
  169.         if (mysql_num_rows($busca) == 0)
  170.         {
  171.                 mysql_query("INSERT INTO `".$WBConfig->getMySQLPrefix()."sessions` (`session_id`, `last_updated`, `data_value`) VALUES ('".mysql_real_escape_string($aKey)."', NOW(), '')");
  172.  
  173.                 @mysql_close($wb_conn);
  174.  
  175.                 return '';
  176.         }
  177.         else
  178.         {
  179.                 $r = mysql_fetch_array($busca);
  180.  
  181.                 @mysql_close($wb_conn);
  182.  
  183.                 return wb_decrypt($r['data_value'], $WBConfig->getMySQLUsername().':'.$WBConfig->getMySQLPassword());
  184.         }
  185. }
  186.  
  187. function sessao_write( $aKey, $aVal )
  188. {
  189.         global $WBConfig;
  190.  
  191.         $wb_conn = @mysql_connect($WBConfig->getMySQLServer(), $WBConfig->getMySQLUsername(), $WBConfig->getMySQLPassword());
  192.         $wb_selc = @mysql_select_db($WBConfig->getMySQLDatabase(), $wb_conn);
  193.  
  194.         mysql_query("UPDATE `".$WBConfig->getMySQLPrefix()."sessions` SET `data_value` = '".wb_encrypt($aVal, $WBConfig->getMySQLUsername().':'.$WBConfig->getMySQLPassword())."', `last_updated` = NOW() WHERE `session_id` = '".mysql_real_escape_string($aKey)."'");
  195.  
  196.         @mysql_close($wb_conn);
  197.  
  198.         return True;
  199. }
  200.  
  201. function sessao_destroy( $aKey )
  202. {
  203.         global $WBConfig;
  204.  
  205.         $wb_conn = @mysql_connect($WBConfig->getMySQLServer(), $WBConfig->getMySQLUsername(), $WBConfig->getMySQLPassword());
  206.         $wb_selc = @mysql_select_db($WBConfig->getMySQLDatabase(), $wb_conn);
  207.  
  208.         mysql_query("DELETE FROM `".$WBConfig->getMySQLPrefix()."sessions` WHERE `session_id` = '".mysql_real_escape_string($aKey)."'");
  209.         if (mysql_affected_rows() > 0)
  210.         mysql_query("OPTIMIZE TABLE `".$WBConfig->getMySQLPrefix()."sessions`");
  211.  
  212.         @mysql_close($wb_conn);
  213.  
  214.         return True;
  215. }
  216.  
  217. function sessao_gc( $aMaxLifeTime )
  218. {
  219.         global $WBConfig;
  220.  
  221.         $wb_conn = @mysql_connect($WBConfig->getMySQLServer(), $WBConfig->getMySQLUsername(), $WBConfig->getMySQLPassword());
  222.         $wb_selc = @mysql_select_db($WBConfig->getMySQLDatabase(), $wb_conn);
  223.  
  224.         mysql_query("DELETE FROM `".$WBConfig->getMySQLPrefix()."sessions` WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(`last_updated`) > ".mysql_real_escape_string($aMaxLifeTime));
  225.         if (mysql_affected_rows() > 0)
  226.         mysql_query("OPTIMIZE TABLE `".$WBConfig->getMySQLPrefix()."sessions`");
  227.  
  228.         @mysql_close($wb_conn);
  229.  
  230.         return True;
  231. }
  232.  
  233. @session_set_save_handler("sessao_open", "sessao_close", "sessao_read", "sessao_write", "sessao_destroy", "sessao_gc");
  234.  
  235. if (isset($_COOKIE[$wb_session_name])) @session_id($_COOKIE[$wb_session_name]);
  236. @session_name($wb_session_name);
  237. @session_start();
  238.  
  239. if ((!isset($_SESSION['wb_user_type'])) || ((isset($_SESSION['wb_user_type'])) && ($_SESSION['wb_user_type'] == '')))
  240. {
  241.         die('<script language="JavaScript">
  242.         <!--
  243.         alert("Sie sind nicht mehr in Personal WebBase eingeloggt!");
  244.         parent.window.close();
  245.         // -->
  246.         </script>');
  247.  
  248. }
  249.  
  250. if (version_compare(PHP_VERSION, '5.1.2', 'lt') && isset($_COOKIE[$session_name]) && eregi("\r|\n", $_COOKIE[$session_name]))
  251. {
  252.         die('Angriff');
  253. }
  254.  
  255. // http://lists.phpbar.de/pipermail/php/Week-of-Mon-20040322/007749.html
  256. // Entnommen von functions.inc.php
  257.  
  258. /* function fetchip()
  259. {
  260.         $client_ip = (isset($_SERVER['HTTP_CLIENT_IP'])) ? $_SERVER['HTTP_CLIENT_IP'] : '';
  261.         $x_forwarded_for = (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : '';
  262.         $remote_addr = (isset($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : '';
  263.  
  264.         if (!empty($client_ip))
  265.         {
  266.                 $ip_expl = explode('.',$client_ip);
  267.                 $referer = explode('.',$remote_addr);
  268.                 if($referer[0] != $ip_expl[0])
  269.                 {
  270.                         $ip=array_reverse($ip_expl);
  271.                         $return=implode('.',$ip);
  272.                 }
  273.                 else
  274.                 {
  275.                         $return = $client_ip;
  276.                 }
  277.         }
  278.         else if (!empty($x_forwarded_for))
  279.         {
  280.                 if(strstr($x_forwarded_for,','))
  281.                 {
  282.                         $ip_expl = explode(',',$x_forwarded_for);
  283.                         $return = end($ip_expl);
  284.                 }
  285.                 else
  286.                 {
  287.                         $return = $x_forwarded_for;
  288.                 }
  289.         }
  290.         else
  291.         {
  292.                 $return = $remote_addr;
  293.         }
  294.         unset ($client_ip, $x_forwarded_for, $remote_addr, $ip_expl);
  295.         return $return;
  296. } */
  297.  
  298. $usedns = TRUE;
  299.  
  300. $useragent = $_SERVER['HTTP_USER_AGENT'];
  301. $host = fetchip();
  302.  
  303. if ($usedns) // <- war im Originalen $global['dns']... was soll das sein?!
  304. $dns = @gethostbyaddr($host);
  305. else
  306. $dns = $host;
  307.  
  308. if ((isset($_SESSION['session_secured'])) && ($_SESSION['session_secured']))
  309. {
  310.         if (
  311.         (($_SESSION['host'] != $host) && !$usedns)
  312.         || ($_SESSION['dns'] != $dns)
  313.         || ($_SESSION['useragent'] != $useragent)
  314.         ) {
  315.                 session_regenerate_id();
  316.                 session_unset();
  317.         }
  318.         } else {
  319.         $_SESSION['host'] = $host;
  320.         $_SESSION['dns'] = $dns;
  321.         $_SESSION['useragent'] = $useragent;
  322.         $_SESSION['session_secured'] = 1;
  323. }
  324.  
  325.  
  326. // Zusatz für phpMyAdmin ...
  327. // Inhalte für die config.inc.php zwischenspeichern und Zustand wiederherstellen
  328.  
  329. $WB_BAK_SESSION = $_SESSION;
  330. global $WB_BAK_SESSION;
  331.  
  332. @session_write_close();
  333. @session_unset();
  334. @session_regenerate_id();
  335.  
  336. // Wiederherstellen der Dinge
  337.  
  338. @ini_set('session.save_handler', $backup_session_save_handler);
  339.  
  340. unset($backup_session_save_handler);
  341.  
  342. // Ende Personal WebBase-Abschnitt
  343.  
  344. ?>
  345.