Subversion Repositories personal-webbase

Rev

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

Rev Author Line No. Line
1 daniel-mar 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
?>