| Autor |
Nachricht |
Snifferdog
Threadersteller
Dabei seit: 08.03.2007
Ort: Wuppertal
Alter: 19
Geschlecht:
|
Verfasst So 03.02.2008 16:32
Titel SQL-Injektion | Login sicher ? |
 |
|
Hey zusammen,
ich habe mein CMS nun endlich fertig gestellt und möchte bevor ich es abliefere nochmal sicher gehen, dass
ich keine großen Sicherheitslücken im Loginscript habe.
Wäre jemand so freundlich und würde sich das eben kurz anschaun und mir sagen, ob es Lücken gibt bzw. wie
ich diese schließen kann?
Mein Loginscript läuft so:
(Unwichtiges Zeug hab ich rausgeschmissen)
| Code: |
[i]Quellcode Index.php[/i]
<form action='login.php' method='POST'>
<input type='text' name='username' size='20' maxlength='20' />
<input type='password' name='passwort' size='20' maxlength='10' />
<input type='submit' name='absenden' value='Einloggen' />
</form>
|
| Code: |
[i]Quellcode login.php[/i]
<?php
$error = "";
include 'connect.php';
include 'errors.php';
if((!isset($_POST['username'])) OR ($_POST['username'] == "") OR (!isset($_POST['passwort'])) OR ($_POST['passwort'] == "")){
$error = "1"; // = Nicht alle Felder wurden ausgefüllt.
}
if($error == ""){
$username = mysql_escape_string($_POST['username']);
$passwort = mysql_escape_string($_POST['passwort']);
$sql = "SELECT * FROM ".$tblname."_user WHERE name = '".$username."'";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_array($result);
if($row['id'] == ""){
$error = "2"; // = Dieser Username existiert nicht.
}
}
if($error == ""){
if($row['passwort'] != $passwort){
$error = "3"; // = Das Passwort stimmt nicht.
}
}
if($error == ""){
header("Location:layout.php");
exit;
}
header('Location:index.php?error='.$error);
?>
|
Der Login läuft weiter über Session - die dann bei jeder Seite überprüft wird.
Mein Gedanke dazu war, dass ich Passwort und Nickname nicht in einen Query gepackt habe
um Injektion im Typ von "OR 1=1" zu vermeiden .....
aber ich kenn mich in dem Bereich kaum aus.
Bin für jeden Tipp dankbar.
Gruß
|
|
| |
|
 |
pRiMUS
Dabei seit: 09.09.2003
Ort: Nemmberch
Alter: 33
Geschlecht:
|
Verfasst So 03.02.2008 18:38
Titel
|
 |
|
die frage die ich mir stelle, wieso belastest du die datenbank mit einem ergebnis, obwohl das evtl gar nicht notwendig ist.
| Code: |
select id from user where name = 'name' and passwort = 'passwort';
|
wenns ein false oder eben keinen recordset zurückgibt gibts halt keinen entsprechenden eintrag.
|
|
| |
|
 |
m
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst So 03.02.2008 19:42
Titel
|
 |
|
|
Zudem ist mysql_escape_string veraltet und du solltest mysql_real_escape_string verwenden.
|
|
| |
|
 |
Snifferdog
Threadersteller
Dabei seit: 08.03.2007
Ort: Wuppertal
Alter: 19
Geschlecht:
|
Verfasst So 03.02.2008 20:01
Titel
|
 |
|
| pRiMUS hat geschrieben: | die frage die ich mir stelle, wieso belastest du die datenbank mit einem ergebnis, obwohl das evtl gar nicht notwendig ist.
| Code: |
select id from user where name = 'name' and passwort = 'passwort';
|
wenns ein false oder eben keinen recordset zurückgibt gibts halt keinen entsprechenden eintrag. |
Naja mein Gedanke war eben, oben genannte Injektion so zu verhindern .. außerdem lässt sich ja so nicht mehr unterscheiden ob der Name nicht existiert oder nur das Passwort falsch ist.
mysql_escape_string hab ich schonmal geändert
|
|
| |
|
 |
dastef
Dabei seit: 03.11.2003
Ort: -
Alter: -
Geschlecht:
|
Verfasst So 03.02.2008 21:35
Titel
|
 |
|
| Snifferdog hat geschrieben: | | Naja mein Gedanke war eben, oben genannte Injektion so zu verhindern .. außerdem lässt sich ja so nicht mehr unterscheiden ob der Name nicht existiert oder nur das Passwort falsch ist. |
Als ob das ne Rolle spielt .. so ne Info würde ich nem User sicher
nicht auf die Nase binden - du hast dein display-error's ja sicher
auch nicht auf "On", oder?
|
|
| |
|
 |
Snifferdog
Threadersteller
Dabei seit: 08.03.2007
Ort: Wuppertal
Alter: 19
Geschlecht:
|
Verfasst So 03.02.2008 23:48
Titel
|
 |
|
| dastef hat geschrieben: | | Snifferdog hat geschrieben: | | Naja mein Gedanke war eben, oben genannte Injektion so zu verhindern .. außerdem lässt sich ja so nicht mehr unterscheiden ob der Name nicht existiert oder nur das Passwort falsch ist. |
Als ob das ne Rolle spielt .. so ne Info würde ich nem User sicher
nicht auf die Nase binden - du hast dein display-error's ja sicher
auch nicht auf "On", oder? |
Mh ja ... klingt logisch ... ^^
|
|
| |
|
 |
| |
|
 |
| Ähnliche Themen |
[SQL] Wie 6 Ergebnisse anzeigen ohne ID / andere SQL-Fragen
Login über DB funktioniert nicht...
login funktioniert im FF aber im IE nicht?
Login Script
[php] Login
login Datei
|
 |