Hallo,
vorab sorry für den langen text!
So, als ich soeben an einem Spiel bastelte wo es darum geht webseiten virtuell zu hacken etc. im zusammenhang mit Cross Site Scripting fiel mir meine eigene seite ein.
Ich also mal meine scripte angeguckt, und auf der Login page als benutzer name "> <hr /> eingegeben. Und da erscheint über die Loginpage eine Horiziontale Linie, htmlspecialchars vergessen.
Im Moment werden die POST Daten ungefiltert in den if anweissungen Verrarbeitet, für einträge in die datenbank erfolgt ständig vorher ein htmlspecialchars bevor die daten im SQL Befehl landen.
Eine Weitere lücke habe ich ja nun eben gefunden, indem ich aufpassen muss überall ein htmlspecialchars zu haben wenn POST Daten ausgegeben werden.
Zu Meinem Loginscript.
Mein Login Script setzt folgende Cookies:
Wenn die daten gelesen werden, bzw. bei jedem neuen Seiten aufruf passiert folgendes in der Index.php:
Also meine frage:
Worauf muss ich noch achten?
Was ist noch wichtig?
Verbesserungsvorschläge?
vorab sorry für den langen text!
So, als ich soeben an einem Spiel bastelte wo es darum geht webseiten virtuell zu hacken etc. im zusammenhang mit Cross Site Scripting fiel mir meine eigene seite ein.
Ich also mal meine scripte angeguckt, und auf der Login page als benutzer name "> <hr /> eingegeben. Und da erscheint über die Loginpage eine Horiziontale Linie, htmlspecialchars vergessen.
Im Moment werden die POST Daten ungefiltert in den if anweissungen Verrarbeitet, für einträge in die datenbank erfolgt ständig vorher ein htmlspecialchars bevor die daten im SQL Befehl landen.
Eine Weitere lücke habe ich ja nun eben gefunden, indem ich aufpassen muss überall ein htmlspecialchars zu haben wenn POST Daten ausgegeben werden.
Zu Meinem Loginscript.
Mein Login Script setzt folgende Cookies:
PHP-Code:
setcookie("eingelogt", "1", time()+32248800);
setcookie("userid", $row['id'], time()+32248800);
setcookie("pass", $row['pass'], time()+32248800);
$_SESSION['nick'] = $row['nick'];
$_SESSION['userid'] = $row['id'];
$_SESSION['rank'] = $row['rank'];
$_SESSION['email'] = $row['email'];
$_SESSION['eingelogt'] = true;
session_regenerate_id();
Wenn die daten gelesen werden, bzw. bei jedem neuen Seiten aufruf passiert folgendes in der Index.php:
PHP-Code:
if($_COOKIE['eingelogt'] == "1") {
$db = mysql_connect('localhost', '***', '***') or die("MySQL Connect Error!");
mysql_select_db('***', $db) or die("Database Select Error!");
$sql = "SELECT * FROM reg_user WHERE id=".htmlspecialchars($_COOKIE['userid']);
$result = mysql_query($sql) or die(mysql_error());
$num = mysql_numrows($result);
$row = mysql_fetch_array($result);
if ($_COOKIE['pass'] == $row['pass']) {
setcookie("eingelogt", "1", time()+32248800);
setcookie("userid", $row['id'], time()+32248800);
setcookie("pass", $row['pass'], time()+32248800);
$_SESSION['nick'] = $row['nick'];
$_SESSION['userid'] = $row['id'];
$_SESSION['rank'] = $row['rank'];
$_SESSION['email'] = $row['email'];
$_SESSION['eingelogt'] = true;
session_regenerate_id();
} else {
$_SESSION['nick'] = "";
$_SESSION['id'] = "";
$_SESSION['rank'] = "";
$_SESSION['email'] = "";
$_SESSION['eingelogt'] = false;
setcookie("eingelogt", "0", time());
setcookie("userid", "0", time());
setcookie("pass", "0", time());
header("Location: ".$_SERVER['PHP_SELF']."?link=cerror");
}
}
Also meine frage:
Worauf muss ich noch achten?
Was ist noch wichtig?
Verbesserungsvorschläge?
Kommentar