Sorting Users by IP from behind a proxy server such as apache proxy pass
-
I noticed an issue with recording results if your server sits behind a proxy.
All the results were coming in as the IP address of the proxy server. This should not be a problem except that results in the plugin seem to be based on IP. This means that if I look at the results for a survey that happened to be taken by 3 different people at the same time says that in this one result set, I have three copies of my gender question which gives 2 males and 1 female because it is listed by the same proxy server IP address rather than the remote IP address of the user.
Here is a temporary fix to get around this:-Edit chained-quiz.php and add this function at the bottom
function get_client_ip() {
$ipaddress = ”;
if ($_SERVER[‘HTTP_CLIENT_IP’])
$ipaddress = $_SERVER[‘HTTP_CLIENT_IP’];
else if($_SERVER[‘HTTP_X_FORWARDED_FOR’])
$ipaddress = $_SERVER[‘HTTP_X_FORWARDED_FOR’];
else if($_SERVER[‘HTTP_X_FORWARDED’])
$ipaddress = $_SERVER[‘HTTP_X_FORWARDED’];
else if($_SERVER[‘HTTP_FORWARDED_FOR’])
$ipaddress = $_SERVER[‘HTTP_FORWARDED_FOR’];
else if($_SERVER[‘HTTP_FORWARDED’])
$ipaddress = $_SERVER[‘HTTP_FORWARDED’];
else if($_SERVER[‘REMOTE_ADDR’])
$ipaddress = $_SERVER[‘REMOTE_ADDR’];
else
$ipaddress = ‘UNKNOWN’;return $ipaddress;
}Next edit controllers/quizzes.php and replace line 124
$quiz->id, $_SERVER[‘REMOTE_ADDR’], $user_ID)); /*Old version*/
with
$quiz->id, get_client_ip(), $user_ID)); /*New version*/Finally edit models/quiz.php and replace line 63
$quiz->id, $points, @$result->id, $_SERVER[‘REMOTE_ADDR’], $user_id, $output, $_SESSION[‘chained_completion_id’])); /*Old Version*/
with
$quiz->id, $points, @$result->id, get_client_ip(), $user_id, $output, $_SESSION[‘chained_completion_id’]));and again line 70
$quiz->id, $points, @$result->id, $_SERVER[‘REMOTE_ADDR’], $user_id, $output)); /*Old version*/
with
$quiz->id, $points, @$result->id, get_client_ip(), $user_id, $output)); /*New version*/Once these changes have been made, the plugin will now take the IP address of the remote user machine or at least the address that they are announcing is theirs as it can be faked. For a survey or quiz, I do not think this should be a big security issue.
- The topic ‘Sorting Users by IP from behind a proxy server such as apache proxy pass’ is closed to new replies.