Author: cfinck Date: Thu Jul 9 04:00:45 2009 New Revision: 446
URL: http://svn.reactos.org/svn/reactos?rev=446&view=rev Log: Change the RosCMS Login code and Bugzilla's ROSCMS Login module to determine the client's IP address also from the X-Forwarded-For header. This also readds the IP check to Bugzilla.
Modified: branches/danny-web/www/www.reactos.org/bugzilla/Bugzilla/Auth/Login/ROSCMS.pm branches/danny-web/www/www.reactos.org/roscms/lib/om/Login.class.php
Modified: branches/danny-web/www/www.reactos.org/bugzilla/Bugzilla/Auth/Login/ROSCMS.pm URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/bu... ============================================================================== --- branches/danny-web/www/www.reactos.org/bugzilla/Bugzilla/Auth/Login/ROSCMS.pm [iso-8859-1] (original) +++ branches/danny-web/www/www.reactos.org/bugzilla/Bugzilla/Auth/Login/ROSCMS.pm [iso-8859-1] Thu Jul 9 04:00:45 2009 @@ -72,10 +72,24 @@ if ( defined $session_id ) { my $session_id_clean = $session_id; trick_taint($session_id_clean); - + + my $ip_clean; + if ($ENV{'HTTP_X_FORWARDED_FOR'}) { + my @proxies = split(/,/, $ENV{'HTTP_X_FORWARDED_FOR'}); + $ip_clean = $proxies[0]; + } else { + $ip_clean = $ENV{'REMOTE_ADDR'}; + } + + if ($ip_clean =~ m/^(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})/) { + $ip_clean = $1; + } else { + $ip_clean = 'invalid'; + } + my $browser_agent_clean = $ENV{'HTTP_USER_AGENT'}; trick_taint($browser_agent_clean); - + my $query = "SELECT m.subsys_user_id, m.user_id " . " FROM $roscms_db_name.roscms_accounts_sessions s " . " JOIN $roscms_db_name.roscms_accounts u ON s.user_id = u.id " . @@ -83,11 +97,13 @@ " WHERE s.id = ? " . " AND (s.expires IS NULL OR " . " NOW() <= s.expires) " . + " AND (s.ip = 'false' OR " . + " s.ip = ?) " . " AND (s.browseragent = 'false' OR " . " s.browseragent = ?) " . " AND m.subsys = 'bugzilla'";
- my @params = ($session_id_clean, $browser_agent_clean); + my @params = ($session_id_clean, $ip_clean, $browser_agent_clean); ($user_id, $roscms_user_id) = $dbh->selectrow_array($query, undef, @params); if ($user_id) {
Modified: branches/danny-web/www/www.reactos.org/roscms/lib/om/Login.class.php URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/ro... ============================================================================== --- branches/danny-web/www/www.reactos.org/roscms/lib/om/Login.class.php [iso-8859-1] (original) +++ branches/danny-web/www/www.reactos.org/roscms/lib/om/Login.class.php [iso-8859-1] Thu Jul 9 04:00:45 2009 @@ -60,10 +60,18 @@ $session_id = $matches[1];
// get a valid ip - if (isset($_SERVER['REMOTE_ADDR']) && preg_match('/^(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})$/', $_SERVER['REMOTE_ADDR'], $matches) ) { - $remote_addr = $matches[1]; - } - else{ + if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) + { + $proxies = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); + $remote_addr = $proxies[0]; + } + else + { + $remote_addr = $_SERVER['REMOTE_ADDR']; + } + + if (!preg_match('/^(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})$/', $remote_addr)) + { $remote_addr = 'invalid'; }