Sicherheit

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Sicherheit

Beitrag von fanrpg »

Also ich baue mir gerade nen kleines Script mit Adminbereich und Co.

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 :D

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]\">";
}
}
}
und die includes/login_protect.php

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
?>
Und jetzt meine Masterfrage:

Wie sicher ist das vor Hackerangriffen?

Ist was unsinnig, fehlt was wichtiges in Sachen Sicherheit?

Oder allgemein was ist daran gefährlich?
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag von fanrpg »

Hat keiner Ahnung von Thema Sicherheit?
Ich will hier keinen Quellcode haben sondern nur wissen wie sicher meine Sachen da sind

btw. *bump*
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Ich hab jetzt den Code zwar nur überflogen, aber ist es nicht idiotisch, 4 Cookies anzulegen? :wink: Schau dir phpBB an, dort werden fürs Login-System imho maximal 2 Cookies gespeichert, wovon einer auch nur für den Autologin da ist. Der zweite enthält nur die session_id, mehr ist auch gar nicht erforderlich, weil der Rest ja sowieso in der Datenbank steht... Und ja, auch das Admin-Flag steht in der DB.

Mein Vorschlag: Orientiere dich an phpBB. Lege eine Session-Tabelle und eine Usertabelle an und speichere dort die Werte aus den Cookies, z.B. Admin-Flag. Wenn du willst, kannst du ja noch deine Admin-Tabelle anlegen, diese würde ich jedoch über die UserID o.Ä. mit der Usertabelle verbinden. :wink:

Edit: angepasst...
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag von fanrpg »

Also es exestiert eine Admintabelle und zusätzlich eine Usertabelle, wobei in der Usertabelle auch nochmal die Adminrechte bestätigt werden müssen.

Zu den 4 Cookies, also stören tuts mich mit den vielen Cookies nicht unbedingt.

Also exestieren insgesamt MySQL Tabellen (user, sessions, admin, comments, cat, pictures und config) währedn user sessions und admin den Zugang zum Adminbereich regeln, der User muss eingeloggt sein (sessions) er muss in der Usertabelle Adminrights auf 1 haben (user) und er muss in der admin Tabelle drin stehen (admin) desweiteren müssen diese beiden Cookies exestieren.
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

fanrpg hat geschrieben:[...] desweiteren müssen diese beiden Cookies exestieren.
Äh, warum? :-?

Code: Alles auswählen

$sql = 'SELECT s.*, u.*, a.* FROM sessions s, users u, admin a
WHERE s.user_id = u.user_id AND s.user_id = a.user_id
AND s.session_id = ' . $session_id;
Dann brauchst du nur einen Cookie. :wink:
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Antworten

Zurück zu „Coding & Technik“