Ich dachte mir mal, dass ich meine kleine PHP Sicherheitsfunktion veröffentliche. Vielleicht hilft diese dem ein oder anderen ja weiter
Eventuell wächst sie dadurch ja auch
Die Kommentare im Code sagen denke ich mal alles aus. Falls es trotzdem noch Unklarheiten gibt, fragt ruhig.
PHP Code:
<?php
/*---------------------------------------------------------------------------------------------
\ Anti - Session Hijacking System /
\_____________________________________/
Überprüfe die aktuelle User IP und gleiche sie mit der gespeicherten in der DB ab.
Sind die IP's nicht gleich, dann wird der User ausgeloggt und sämtliche
Sessions, welche dem Account zugeordnet waren, werden zerstört.
WICHTIG: Dieses Script ist auf JEDER Seite, welche ein Nutzerkonto nutzt einzubinden.
Dazu zählen schon User Panels.
Mögliche Komplikationen: Falls ein Session Cookie für einen dauerhaften Login genutzt wird
und der user nach der Zwangstrennung eine neue IP erhalten hat,
tritt dieses System in Kraft und macht die Session sowie Cookie zunichte.
Mögliche Lösung: Bei der Auswertung der IP Adresse nicht die aktuelle IP sondern
die IP-Range auswerten.
---------------------------------------------------------------------------------------------*/
#error_reporting(E_ALL);
#ini_set("display_errors", 1);
function Validate($mode = TRUE) {
if ($mode) {
require_once('./system/config/dbconfig.php');
mysql_connect("" . $mysqlhost . "","" . $mysqluser . "","" . $mysqlpwd . "","" . $mysqlport . "");
mysql_select_db($server_db) or die(mysql_error());
session_start();
if(isset($_COOKIE['PHPSESSID']))
{
// User IP auslesen
if (!isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$client_ip_val = $_SERVER['REMOTE_ADDR'];
} else {
$client_ip_val = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
// Gespeicherte User IP auslesen
$session_id_val = session_id();
$user_ip = mysql_query("SELECT last_login_ip FROM website_login WHERE sid=('" . $session_id_val . "')");
$user_ip_con = mysql_fetch_object($user_ip);
$user_ip_val = $user_ip_con->last_login_ip;
// Falls User IP und gespeicherte IP nicht übereinstimmen
if($client_ip_val != $user_ip_val) {
if($_GET['form'] != UserLogin) {
$session_id_validated = session_id();
mysql_query("INSERT INTO protection_system_logs (message, account_id, user_ip, saved_ip, date) VALUES ('User wurde aufgrund nicht identischer IP Adressen durch das Anti-Session Hijacking System ausgeloggt.', (SELECT id FROM website_login WHERE sid= ('" . $session_id_validated . "')), ('" . $client_ip_val . "'), ('" . $user_ip_val . "'), NOW())") or die(mysql_error());
mysql_query("UPDATE website_login SET last_sid=sid,sid=0,logged_in=0 WHERE sid=('" . $session_id_validated . "')");
mysql_query("UPDATE user_sessions SET last_sid=sid,sid=0,active=0 WHERE sid=('" . $session_id_validated . "')");
// Session Keks zerkrümeln
setcookie ("PHPSESSID", "", time() - 3600);
}
// Falls User IP und gespeicherte IP übereinstimmen: Funktion verlassen
} else { exit(); }
}
// Falls System deaktiviert: Funktion verlassen
} else { exit(); }
}
Validate();
?>






