Und da kam mir heute die Frage zum Thema Sicherheit, also jetzt meine Fragen:
Immo benutze ich Cookie als Authentifizierung und zwar ganze 4 Stück

2 davon sind für Admins in den anderen wird jeweils die User ID und der Username gespeichert. In den Admincookie 1 ob der Adminrechte auf 1 sind und im 2ten das selbe nochmal nur unter anderem Namen.
Abgefragt werden die Adminrechte dann im Admincp ob beide Cookie exestieren und ob beide Adminrechte die 1 also auf Adminrechte drin haben. Der Cookie mit der User ID wird auch nochmal überprüft ob die User ID die da drin gespeichert ist in der Datenbank auch nochmal Adminrechte hat. Das selbe nochmal für den Usernamen.
Desweiteren steht jeder Admin nochmal in einer extra Admintabelle (unabhängig von der Usertabelle) wo auch nochmal die user ID der Name und das Passwort drin steht. Und wenn die user ID und der username da nicht drin steht (wird beides geprüft) folgt auch kein Einlass in den Administrationsbereich.
Und desweiteren wird geprüft ob eine Session besteht mit dem Usernamen des Admins. Das heisst der Admin muss eingeloggt sein um Einlass zu kriegen.
Desweiteren habe ich jede MySQL Query wo eine externe Eingabe erfolgt wird durch mysql_espace_string abgesichert in der Hoffnung das das vor einer Injection reicht.
Und es wird bei jeder Datei auch abgefragt (wie bei phpBB) ob eine Konstante definiert wurde das die includiert werden darf (bei includ Dateien)
Hier mal die Login.php
Code: Alles auswählen
<?php
require_once("config.php");
if(isset($_POST['submit'])) {
require_once('includes/login_protect.php');
$loginquery = mysql_query("SELECT * FROM `user` ORDER BY `ID` DESC");
while($row = mysql_fetch_assoc($loginquery))
{
if($row['username'] == $_POST['username'] && $row['password'] == $_POST['password']) {
setcookie("nemgengallerie", $row['ID'], time()+216000);
if($row['adminrights'] == "1")
{
$sql = "SELECT * FROM `admin` WHERE `user_id` = '".$row['ID']."' LIMIT 1";
$query = mysql_query($sql) or die(mysql_error());
$reihe = mysql_fetch_assoc($query);
if($reihe['name'] == $_POST['username'] && $reihe['password'] == $_POST['password'] && $reihe['user_id'] == $row['ID'])
{
setcookie("nemgengallerieadmin", $row['adminrights'], time()+216000);
setcookie("nemgengallerieadminrights", $row['adminrights'], time()+216000);
}
}
setcookie("nemgengallerieusername", $row['username'], time()+216000);
echo "<meta http-equiv=\"refresh\" content=\"0; URL=index.php?userid=$row[ID]&username=$row[username]\">";
}
}
}
Code: Alles auswählen
<?php
// Schutz vor Doppellogin
unset($logsql, $logresult, $logrow);
$logsql = "SELECT * FROM `sessions` WHERE `session_logged_in` = 1";
$logresult = mysql_query($logsql) or die(mysql_error());
while($logrow = mysql_fetch_assoc($logresult))
{
if($logrow['username'] == $_POST['username'])
{
die("Hacking! Nicht hacken du Ratte! Jeder Account darf nur einmal online sein!!!");
}
}
// end Doppellogin
// Schutz vor MySQL Injectionen
$_POST['username'] = mysql_escape_string($_POST['username']);
$_POST['password'] = mysql_escape_string($_POST['password']);
// End Schutz vor MySQL Injectionen
?>
Wie sicher ist das vor Hackerangriffen?
Ist was unsinnig, fehlt was wichtiges in Sachen Sicherheit?
Oder allgemein was ist daran gefährlich?