Hallo,
Ich habe mal versucht mit Ajax ein Login Script zu erstellen. Das ist mir mir meiner Meinung nach auch einigermassen gut gelungen.
leider ist dies nicht der Fall.
Ist mein Script so sinnvoll,
Nein, der Einsatz von Ajax ist hier völlig überflüssig.
sicher etc..
Noch unsicherer geht's ja fast nicht mehr. Man benötigt noch nicht mal einen gültigen Benutzernamen, um sich einzuloggen :-)
Ein paar werden sich vieleicht Fragen warum Ajax... Ich wollte einen Login der auch schön ausschaut und mit Ajax lassen sich Ladegrafiken etc meiner Meinung nach am besten verwirklichen.
und wo gibt es hier Ladegrafiken? Da Du bei Erfolg weiterleitest (prüfst Du dort die erfolgreiche Anmeldung?), ist Ajax - wie ich schon anmerkte - überflüssig.
[code lang=php]
<?php
session_start();if(isset($_POST['name']))
{
if(isset($_POST['ajax']))
{
$pw = md5($_POST['pw']);
$name = $_POST['name'];$con = mysql_connect("localhost","Benutzername","Passwort");
mysql_select_db("Datenbank",$con);
$sql="SELECT userid FROM user WHERE username='".$name."' AND passwort='".$pw."' LIMIT 1";
Du bist anfällig für SQL-Injection, weil Du Benutzereingaben nicht kontextgerecht behandelst. Durch die überflüssige LIMIT-Klausel machst Du es dem Angreifer doppelt leicht. Man benötigt daher weder Benutzernamen noch Passwort, um sich anmelden zu können.
$result= mysql_query($sql);
Keine Überprüfung, ob mysql_query vielleicht fehlschlägt. Nett.
if(mysql_num_rows($result) == 1)
Verflixt. Wenn nicht 0 Datensätze herauskommen, wird genau einer herauskommen. Mit einem geschickt gewählten Benutzernamen kommt immer genau ein Datensatz heraus.
{
$user=mysql_fetch_assoc($result);
$userid = $user['userid'];
$sql="UPDATE user SET session='".session_id()."' WHERE userid=".$userid;
[...]
elseif(!isset($_POST['ajax']))
{
$pw = md5($_POST['password']);
$name = $_POST['username'];
Du wiederholst eine Menge Code, ein Zeichen für Verbesserungspotential.
$con = mysql_connect("localhost","Benutzername","Passwort");
mysql_select_db("Datenbank",$con);
$sql="SELECT userid FROM user WHERE username='".$name."' AND passwort='".$pw."' LIMIT 1";
$result= mysql_query($sql);
Gleiches wie oben.
[...]
mysql_query($sql);
Header("Location: home.php");
häufig gemachter Fehler beim Location-Header. Dieser benötigt eine absolute URI. Was ist wenn jemand seine Anfrage gleich an home.php schickt? Du musst in jeder Seite, die nur über das Login erreichbar sein soll, die erfolgreiche Anmeldung überprüfen.
Freundliche Grüße
Vinzenz