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. // Personal WebBase-Spezifischer Session-Abschnitt
  6.  
  7. // http://de3.php.net/md5: Alexander Valyalkin
  8.  
  9. function get_rnd_iv($iv_len)
  10. {
  11.         $iv = '';
  12.         while ($iv_len-- > 0) {
  13.                 $iv .= chr(mt_rand() & 0xff);
  14.         }
  15.         return $iv;
  16. }
  17.  
  18. function wb_encrypt($plain_text, $password, $iv_len = 16)
  19. {
  20.         $plain_text .= "\x13";
  21.         $n = strlen($plain_text);
  22.         if ($n % 16) $plain_text .= str_repeat("\0", 16 - ($n % 16));
  23.         $i = 0;
  24.         $enc_text = get_rnd_iv($iv_len);
  25.         $iv = substr($password ^ $enc_text, 0, 512);
  26.         while ($i < $n) {
  27.                 $block = substr($plain_text, $i, 16) ^ pack('H*', md5($iv));
  28.                 $enc_text .= $block;
  29.                 $iv = substr($block . $iv, 0, 512) ^ $password;
  30.                 $i += 16;
  31.         }
  32.         return base64_encode($enc_text);
  33. }
  34.  
  35. function wb_decrypt($enc_text, $password, $iv_len = 16)
  36. {
  37.         $enc_text = base64_decode($enc_text);
  38.         $n = strlen($enc_text);
  39.         $i = $iv_len;
  40.         $plain_text = '';
  41.         $iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512);
  42.         while ($i < $n) {
  43.                 $block = substr($enc_text, $i, 16);
  44.                 $plain_text .= $block ^ pack('H*', md5($iv));
  45.                 $iv = substr($block . $iv, 0, 512) ^ $password;
  46.                 $i += 16;
  47.         }
  48.         return preg_replace('/\\x13\\x00*$/', '', $plain_text);
  49. }
  50.  
  51. global $WBConfig;
  52.  
  53. if ($WBConfig->getLockFlag())
  54. {
  55.         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!');
  56. }
  57.  
  58. //@ini_set('session.auto_start', 0);
  59. @ini_set('session.cache_expire', 180);
  60. @ini_set('session.use_trans_sid', 0);
  61. @ini_set('session.use_cookies', 1);
  62. @ini_set('session.use_only_cookies', 1);
  63. @ini_set('session.cookie_secure', $WBConfig->getForceSSLFlag());
  64. @ini_set('session.cookie_lifetime', 0);
  65. @ini_set('session.gc_maxlifetime', 1440);
  66. @ini_set('session.bug_compat_42', 0);
  67. @ini_set('session.bug_compat_warn', 1);
  68. if (version_compare(PHP_VERSION, '5.0.0', 'ge') && substr(PHP_OS, 0, 3) != 'WIN')
  69. {
  70.         @ini_set('session.hash_function', 1);
  71.         @ini_set('session.hash_bits_per_character', 6);
  72. }
  73. @ini_set('session.save_handler', 'user');
  74. // @ini_set('session.save_path', '../../../includes/session/');
  75. // @ini_set('arg_separator.output', '&amp;');
  76. // @ini_set('url_rewriter.tags', 'a=href,area=href,frame=src,input=src,fieldset=');
  77.  
  78. $wb_session_name = 'webbase';
  79.  
  80. @session_unset();
  81. @session_destroy();
  82.  
  83. // wb_newdatabasetable('sessions', $m2, 'session_id', "varchar(255) NOT NULL",
  84. //                                      'last_updated', "datetime NOT NULL",
  85. //                                      'data_value', "text");
  86.  
  87. function sessao_open($aSavaPath, $aSessionName)
  88. {
  89.         sessao_gc( ini_get('session.gc_maxlifetime') );
  90.         return True;
  91. }
  92.  
  93. function sessao_close()
  94. {
  95.         return True;
  96. }
  97.  
  98. function sessao_read( $aKey )
  99. {
  100.         global $WBConfig;
  101.  
  102.         $wb_conn = @mysql_connect($WBConfig->getMySQLServer(), $WBConfig->getMySQLUsername(), $WBConfig->getMySQLPassword());
  103.         $wb_selc = @mysql_select_db($WBConfig->getMySQLDatabase(), $wb_conn);
  104.  
  105.         $busca = mysql_query("SELECT `data_value` FROM `".$WBConfig->getMySQLPrefix()."sessions` WHERE `session_id` = '".mysql_real_escape_string($aKey)."'");
  106.         if (mysql_num_rows($busca) == 0)
  107.         {
  108.                 mysql_query("INSERT INTO `".$WBConfig->getMySQLPrefix()."sessions` (`session_id`, `last_updated`, `data_value`) VALUES ('".mysql_real_escape_string($aKey)."', NOW(), '')");
  109.  
  110.                 @mysql_close($wb_conn);
  111.  
  112.                 return '';
  113.         }
  114.         else
  115.         {
  116.                 $r = mysql_fetch_array($busca);
  117.  
  118.                 @mysql_close($wb_conn);
  119.  
  120.                 return wb_decrypt($r['data_value'], $WBConfig->getMySQLUsername().':'.$WBConfig->getMySQLPassword());
  121.         }
  122. }
  123.  
  124. function sessao_write( $aKey, $aVal )
  125. {
  126.         global $WBConfig;
  127.  
  128.         $wb_conn = @mysql_connect($WBConfig->getMySQLServer(), $WBConfig->getMySQLUsername(), $WBConfig->getMySQLPassword());
  129.         $wb_selc = @mysql_select_db($WBConfig->getMySQLDatabase(), $wb_conn);
  130.  
  131.         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)."'");
  132.  
  133.         @mysql_close($wb_conn);
  134.  
  135.         return True;
  136. }
  137.  
  138. function sessao_destroy( $aKey )
  139. {
  140.         global $WBConfig;
  141.  
  142.         $wb_conn = @mysql_connect($WBConfig->getMySQLServer(), $WBConfig->getMySQLUsername(), $WBConfig->getMySQLPassword());
  143.         $wb_selc = @mysql_select_db($WBConfig->getMySQLDatabase(), $wb_conn);
  144.  
  145.         mysql_query("DELETE FROM `".$WBConfig->getMySQLPrefix()."sessions` WHERE `session_id` = '".mysql_real_escape_string($aKey)."'");
  146.         if (mysql_affected_rows() > 0)
  147.         mysql_query("OPTIMIZE TABLE `".$WBConfig->getMySQLPrefix()."sessions`");
  148.  
  149.         @mysql_close($wb_conn);
  150.  
  151.         return True;
  152. }
  153.  
  154. function sessao_gc( $aMaxLifeTime )
  155. {
  156.         global $WBConfig;
  157.  
  158.         $wb_conn = @mysql_connect($WBConfig->getMySQLServer(), $WBConfig->getMySQLUsername(), $WBConfig->getMySQLPassword());
  159.         $wb_selc = @mysql_select_db($WBConfig->getMySQLDatabase(), $wb_conn);
  160.  
  161.         mysql_query("DELETE FROM `".$WBConfig->getMySQLPrefix()."sessions` WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(`last_updated`) > ".mysql_real_escape_string($aMaxLifeTime));
  162.         if (mysql_affected_rows() > 0)
  163.         mysql_query("OPTIMIZE TABLE `".$WBConfig->getMySQLPrefix()."sessions`");
  164.  
  165.         @mysql_close($wb_conn);
  166.  
  167.         return True;
  168. }
  169.  
  170. @session_set_save_handler("sessao_open", "sessao_close", "sessao_read", "sessao_write", "sessao_destroy", "sessao_gc");
  171.  
  172. if (isset($_COOKIE[$wb_session_name])) @session_id($_COOKIE[$wb_session_name]);
  173. @session_name($wb_session_name);
  174. @session_start();
  175.  
  176. if ((!isset($_SESSION['wb_user_type'])) || ((isset($_SESSION['wb_user_type'])) && ($_SESSION['wb_user_type'] == '')))
  177. {
  178.         die('<script language="JavaScript">
  179.         <!--
  180.         alert("Sie sind nicht mehr in Personal WebBase eingeloggt!");
  181.         parent.window.close();
  182.         // -->
  183.         </script>');
  184.  
  185. }
  186.  
  187. if (version_compare(PHP_VERSION, '5.1.2', 'lt') && isset($_COOKIE[$session_name]) && eregi("\r|\n", $_COOKIE[$session_name]))
  188. {
  189.         die('Angriff');
  190. }
  191.  
  192. // http://lists.phpbar.de/pipermail/php/Week-of-Mon-20040322/007749.html
  193. // Entnommen von functions.inc.php
  194.  
  195. function fetchip()
  196. {
  197.         $client_ip = (isset($_SERVER['HTTP_CLIENT_IP'])) ? $_SERVER['HTTP_CLIENT_IP'] : '';
  198.         $x_forwarded_for = (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : '';
  199.         $remote_addr = (isset($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : '';
  200.  
  201.         if (!empty($client_ip))
  202.         {
  203.                 $ip_expl = explode('.',$client_ip);
  204.                 $referer = explode('.',$remote_addr);
  205.                 if($referer[0] != $ip_expl[0])
  206.                 {
  207.                         $ip=array_reverse($ip_expl);
  208.                         $return=implode('.',$ip);
  209.                 }
  210.                 else
  211.                 {
  212.                         $return = $client_ip;
  213.                 }
  214.         }
  215.         else if (!empty($x_forwarded_for))
  216.         {
  217.                 if(strstr($x_forwarded_for,','))
  218.                 {
  219.                         $ip_expl = explode(',',$x_forwarded_for);
  220.                         $return = end($ip_expl);
  221.                 }
  222.                 else
  223.                 {
  224.                         $return = $x_forwarded_for;
  225.                 }
  226.         }
  227.         else
  228.         {
  229.                 $return = $remote_addr;
  230.         }
  231.         unset ($client_ip, $x_forwarded_for, $remote_addr, $ip_expl);
  232.         return $return;
  233. }
  234.  
  235. $usedns = TRUE;
  236.  
  237. $useragent = $_SERVER['HTTP_USER_AGENT'];
  238. $host = fetchip();
  239.  
  240. if ($usedns) // <- war im Originalen $global['dns']... was soll das sein?!
  241. $dns = @gethostbyaddr($host);
  242. else
  243. $dns = $host;
  244.  
  245. if ((isset($_SESSION['session_secured'])) && ($_SESSION['session_secured']))
  246. {
  247.         if (
  248.         (($_SESSION['host'] != $host) && !$usedns)
  249.         || ($_SESSION['dns'] != $dns)
  250.         || ($_SESSION['useragent'] != $useragent)
  251.         ) {
  252.                 session_regenerate_id();
  253.                 session_unset();
  254.         }
  255.         } else {
  256.         $_SESSION['host'] = $host;
  257.         $_SESSION['dns'] = $dns;
  258.         $_SESSION['useragent'] = $useragent;
  259.         $_SESSION['session_secured'] = 1;
  260. }
  261.  
  262. // Ende Personal WebBase-Abschnitt
  263.  
  264. ?>
  265.