Guten Abend alle miteinander
Meine Frage bezieht sich auf einen von mir programmierten Internen-Bereich. Und zwar würde ich gern einige Dinge über die Sicherheit erfahren. Was kann ich verbessern, was muss ich anders machen etc...
Mein System arbeitet mit Session-Cookies. Beim Login werden Benutzerdaten in die Session geschrieben. In allen internen Bereichen wird überprüft ob eine User_id gesetzt ist.(wird beim login natürlich gesetzt). Außerdem wird beim Login die Ip gespeichert und bei jeder Seite im internen Bereich diese mit der aktuellen verglichen. Wenn eine dieser Überprüfungen negativ ist wird man zur loginseite geleitet.(header) Um alle User zu verwalten habe ich einen Administrationsbereich gemacht. Dort werden die beiden Überprüfungen auch gemacht und hinzu kommt noch die Abfrage ob in der Datenbank bei dem User in einem Feld admin steht. Wenn nicht wird man in den Internen Bereich geleitet.
Meine Fragen sind. Ist das System sicher? Wo ist es unsicher...
Ich habe irgendwo gelesen, das es möglich ist mit include einfach eigene Scripte einzubinden etc. und man daher den include Befehl sicher machen sollte. Wie hab ich nicht herrausgefunden. (vlt mit einer abfrage ob die Datei in einem bestimmten festgelegtem Ordner liegt oder ähnlich).
Außerdem habe ich von einem Schutz vor Bruteforceangriffen gelesen, der meiner Meinung sehr Userunfreundlich ist.(zeitliche Sperrung des Accounts bei einer bestimmter Anzahl von fehlerhaften Loginversuchen)
einige Quellcodes:
Login
Intern-Check:
Admin-Check(nur das Zusätzliche):
Vielen Dank im Vorraus
Aegnor
Meine Frage bezieht sich auf einen von mir programmierten Internen-Bereich. Und zwar würde ich gern einige Dinge über die Sicherheit erfahren. Was kann ich verbessern, was muss ich anders machen etc...
Mein System arbeitet mit Session-Cookies. Beim Login werden Benutzerdaten in die Session geschrieben. In allen internen Bereichen wird überprüft ob eine User_id gesetzt ist.(wird beim login natürlich gesetzt). Außerdem wird beim Login die Ip gespeichert und bei jeder Seite im internen Bereich diese mit der aktuellen verglichen. Wenn eine dieser Überprüfungen negativ ist wird man zur loginseite geleitet.(header) Um alle User zu verwalten habe ich einen Administrationsbereich gemacht. Dort werden die beiden Überprüfungen auch gemacht und hinzu kommt noch die Abfrage ob in der Datenbank bei dem User in einem Feld admin steht. Wenn nicht wird man in den Internen Bereich geleitet.
Meine Fragen sind. Ist das System sicher? Wo ist es unsicher...
Ich habe irgendwo gelesen, das es möglich ist mit include einfach eigene Scripte einzubinden etc. und man daher den include Befehl sicher machen sollte. Wie hab ich nicht herrausgefunden. (vlt mit einer abfrage ob die Datei in einem bestimmten festgelegtem Ordner liegt oder ähnlich).
Außerdem habe ich von einem Schutz vor Bruteforceangriffen gelesen, der meiner Meinung sehr Userunfreundlich ist.(zeitliche Sperrung des Accounts bei einer bestimmter Anzahl von fehlerhaften Loginversuchen)
einige Quellcodes:
Login
Code:
include ("./connect.php"); $user_pw=$_POST["user_pw"]; $login_query = mysql_query("SELECT * FROM user_index where user_nick ='$user_nick' And user_pw ='$user_pw'"); if (mysql_num_rows ($login_query) > 0) { $login = mysql_fetch_array($login_query); $_SESSION["session_user_id"] = $login["user_id"]; $_SESSION["session_user_nick"] = $login["user_nick"]; $_SESSION["session_user_forename"] = $login["user_forename"]; $_SESSION["session_user_surname"] = $login["user_surname"]; $_SESSION["session_user_ip"] =$_SERVER['REMOTE_ADDR']; $user_id=$login["user_id"]; mysql_query("UPDATE user_index SET user_last = Now('') where user_id ='$user_id'"); header ("Location: intern.php"); } else { header ("Location: index.php?error=1"); }
Code:
<?php session_start (); if (!isset ($_SESSION["session_user_id"])) { header ("Location: index.php?error=2"); } if($_SESSION["session_user_ip"] != $_SERVER['REMOTE_ADDR']) { header ("Location: index.php?error=2"); } ?>
Code:
$user_id=$_SESSION["session_user_id"]; $result = mysql_query("SELECT user_type FROM user_index where user_id = '$user_id'"); $user_type = mysql_result($result, 0, 0); if ($user_type != "admin") { header ("Location: ../intern.php?error=1"); }
Aegnor
Kommentar