ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
1106
1106
EMPFEHLEN
-
Hallo,
Ich wollte jetzt mal anfangen meine komplette Seite sicherer zu machen. Ein Bekannter, der Informatik studiert hat meine Seite wohl mit einem Linux-Scanner geprüft und mir gesagt das mein Login-Script eine große Sicherheitslücke aufweißt ... da Er momentan überhaupt keine Zeit hat wegen Klausuren ect. dachte ich poste ich mal mein Login (welcher bereits deaktiviert ist) Und bitte die Cracks unter euch mir mal Hilfestellung zu geben.
Danke vorweg ChrisPHP-Code:function login($refresh)
{
if(isset ($_POST['c_nick']) AND ($_POST['c_pw']))
{
$query = mysql_query("SELECT * FROM profile WHERE nick = '".$_POST['c_nick']."'");
$ask = mysql_fetch_array($query);
if($ask['nick'] == $_POST['c_nick'])
{
if($ask['pass'] == $_POST['c_pw'])
{
setcookie("login_user",$_POST['c_nick'],time()+1800,"/");
echo '<div class="size1">Sie werden eingelogt!...</div><meta http-equiv="refresh" content="1; URL=index.php?content='.$refresh.'">';
}
else
{
echo '<div class="size1">Passwort falsch!</div>';
}
}
else
{
echo '<div class="size1">Benutzername falsch!</div>';
}
}
}
Wer sichere Schritte tun will, muss sie langsam tun.
~Goethe
-
Mein Vorschlag:
PHP-Code:function login( $login, $pass )
{
$query = '
SELECT
1
FROM
`profile`
WHERE
`nick` = "'.mysql_real_escape_string($login).'"
AND `pass` = "'.mysql_real_escape_string($pass).'"
';
$result = mysql_query($query);
if( mysql_num_rows($result) === 1 ) {
return setcookie('login_user', $login, time()+1800, '/');
}
return false;
}
if( isset($_POST['c_nick']) && isset($_POST['c_pw']) ) {
if( login($_POST['c_nick'], $_POST['c_pw']) ) {
echo 'Sie sind nun eingeloggt.';
} else {
echo 'Benutzername und/oder Passwort sind falsch.';
}
} else {
echo 'Bitte geben Sie Benutzernamen und Passwort ein.';
}
Markus Wulftange
-
Hallo Chris,
- Zeile 4 müsste wohl so lauten:
PHP-Code:if(isset ($_POST['c_nick']) AND isset($_POST['c_pw']))
- Zeile 6:
Grundregel: Von außerhalb kommende Daten (vor allem aber Benutzereingaben) sind grundsätzlich böse! Das heißt, man muss darauf vorbereitet sein, dass diese Daten alles enthalten, nur nur nicht das, was man erwartet. Deshalb niemals Einträge aus $_POST, $_GET etc. ungefiltert in eine Datenbankabfrage einbinden. Wenn es sich um einen String handelt, sollte man vorher mysql_real_escape_string() drüberlaufen lassen, bei Ganzzahlen hilft beispielsweise intval().
So sollte die Zeile dann aussehen:
In deinem Fall geht zwar keine größere Gefahr von der fehlenden Filterung aus (soweit ich das sehen kann), aber man sollte es sich trotzdem angewöhnen.PHP-Code:$query = mysql_query("SELECT * FROM profile WHERE nick = '".mysql_real_escape_string($_POST['c_nick'])."'");
- Zeile 11:
Passwörter sollte man schon allein aus Datenschutzgründen nicht im Klartext in der Datenbank speichern. Meist wird hier stattdessen ein Hashwert wie beispielsweise MD5 verwendet. - Zeile 13:
Authentifizierst du den Benutzer wirklich nur über dieses Cookie? Damit steht es jedem frei, das Cookie auf seinem Rechner zu verändern und sich damit ohne Passwortabfrage als jeder beliebige User auszugeben. Da müsstest du dir was anderes überlegen (z.B. Sessions). - Zeile 18:
Es empfiehlt sich eigentlich nicht, gesondert auf ein falsches Passwort hinzuweisen. Dadurch wird es jemanden, der nach gültigen Zugangsdaten sucht, nämlich leichter gemacht (er kann erst mal nach einen gültigen Benutzernamen suchen und dann nach dem passenden Passwort).
So, das war's erst mal. Hab jetzt nicht alles ganz detailliert beschrieben, darum einfach nachfragen, wo weiter Informationsbedarf besteht.
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
- Zeile 4 müsste wohl so lauten:
-
Jo Thx, hatte eben auch ein Tuti gefunden...
Noch eine Sache zu md5... Das bringt nicht wirklich viel da das PW von Host aus unverschlüsselt gesendet wird... Wie du schon selbst sagtest da gehts wohl mehr um Datenschutz.Wer sichere Schritte tun will, muss sie langsam tun.
~Goethe
-
Hallo,
du kannst bei Bedarf auch clientseitig vor dem Versenden den MD5-Hash bilden und dann diesen abschicken (z.B. mit JavaScript). Oder du setzt gleich auf HTTPS.
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Hm, ok soweit habe ich jetzt nicht gedacht
aber was anders... Gumbo hat wie ich finde ein sehr gutes Script gepostet was ich teilweise übernehmen werde danke an dieser stelle an Gumbo ebenso dank dir Matthias! Noch was zu Cookies wie könnte ich die denn sicherer machen so das der User keinen wirklichen Erfolg mit ändern des Cookies erziehlen würde?
Wer sichere Schritte tun will, muss sie langsam tun.
~Goethe
-
Hallo,
wie gesagt: Sessions wären eine passende Lösung.
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
Ähnliche Themen
-
Mysql sicher machen!
Von Nerlich im Forum PHPAntworten: 3Letzter Beitrag: 09.02.08, 15:25 -
.Net Remoting sicher machen
Von MariusMeuser im Forum .NET Web und KommunikationAntworten: 3Letzter Beitrag: 18.08.07, 19:42 -
Gästebuch sicher machen!
Von Seven Secrets im Forum PHPAntworten: 4Letzter Beitrag: 19.01.06, 04:25 -
Usereingabe sicher machen
Von chaosente im Forum PHPAntworten: 4Letzter Beitrag: 20.10.05, 22:24 -
Eintrittskarten sicher machen
Von -exr- im Forum Creative LoungeAntworten: 8Letzter Beitrag: 14.02.05, 15:58





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren