Ich kriegs einfach nicht hin.

Da muss man schon php richtig können um das zu machen, zumal zwar anmelden usw. geht, aber ich kann ja trotzdem auf die Seiten in den unteren Ebenen, auch wenn ich mich nicht anmelde. Hätte nicht gedacht, dass es so schwer ist, son script zu machen, welches nur die Mail und den user überprüft, aber nunja falsch gedacht

Klar nur ein login bring keinen Schutz du mußt schon auch die Geschützen Seiten überprüfen ob der User berechtig ist diese auch einzusehen. Am besten geht das mit einer Session.

Fals dir das alles zu schwer ist und du nur einen Schutz haben möchste damit nicht jeder deine Geheimen Seiten einsehen kann.Dann benutze den Verzeichniss schutz .htacces
 
Hmh...

Ich weiss ja nicht, aber über des Script aus dem Tutorial kann man SQL Injections machen... Da gibts ja keinerlei sicherheitsmechanismen, ziemlich fahrlässig sowas sensibles als Tutorial zu veröffentlichen.

PHP:
$sql = "SELECT ". 
    "Id, Nickname, Nachname, Vorname ". 
  "FROM ". 
    "benutzerdaten ". 
  "WHERE ". 
    "(Nickname like '".$_REQUEST["name"]."') AND ". 
    "(Kennwort = '".md5 ($_REQUEST["pwd"])."')"; 
$result = mysql_query ($sql);

da könnt man per url folgendes machen:

http://[domain]/[pfad]/login.php?name=namedesadmins&pwd=bla' OR id='1'

und zack müsste man eingeloggt sein. Warum? fehlende Sicherheitsmechanismen.
Erstens: Superglobale wie $GLOBAL und vor allem $_REQUEST nimmt man NICHT! IMMER die Superglobale nehmen, die auch übertragen wird, sprich $_GET oder $_POST. zudem sollte eine abfrage dann folgendermaßen aussehen:


PHP:
$name = $_POST['name'];
$pwd = $_POST['pwd'];
$sql = "SELECT ". 
    "Id, Nickname, Nachname, Vorname ". 
  "FROM ". 
    "benutzerdaten ". 
  "WHERE ". 
    "(Nickname like '".mysql_real_escape_string($name)."') AND ". 
    "(Kennwort = '".md5 ($pwd)."')"; 
$result = mysql_query ($sql);

nehnehneh... versteh ich nich, warum man tutorials schreibt, die so unsicher sind. Ich denke man sollte die User gleich mit der harten Realität konfrontieren und denen einbleuen, dass sie ihre Script sicher machen müssen. Zumindest nach bestem Wissen und Gewissen.

ich selbst habe ein Loginscript entwickelt, bei dem ich 2 sessions nutze - eine PHPSession und eine eigene, die sich alle 60 sekunden erneuert und beim user und in der Datenbank abgespeichert ist. Somit ist es so ziemlich unmöglich den Account zu highjacken, denn einen 128bit schlüssel zu klauen oder nachzubilden dauert weit länger als 60 sekunden^^. Die PHP-Session dient hierbei eher als zusätzliche Kontrolle und als Userdaten-Speicher^^

So, das dazu^^

worauf ich hinaus will: TribunM - mach dich DRINGEND mit der Sicherheit von PHP vertraut, bevor du etwas so sensibles wie datenbankbasierte Anwendungen (Loginscript, Newsscript etc) öffentlich nutzt.

Und vor allem: Gebe NIEMALS die PHP-Sessionid über die Url weiter, wie es teilweise in einigen Tutorials im Inet gemacht wird.. Benutze NIEMALS $GLOBAL und $_REQUEST, sondern frage immer die Methode ab, die du auch übergibst. Nutze bei Datenbankabfragen immer mysql_real_escape_string(); und strip_tags(); (damit werden HTML und PHP-Tags rausgefiltert).

Ansonsten viel spass :D PHP ist nicht schwer, bis mans verstanden hat dauerts aber. Und bis dahin empfehle ich eher fertige CMS-Systeme zu nutzen und diese zu studieren, bevor du ein eigenes Loginsystem programmierst.
 
Das Tutorial ist auch schon "etwas" älter.
Es dient also nicht zum "abschreiben", sondern zum anregen.
Letztenendes muss man viele Scripts anpassen (ob nun aus sicherheitstechnischer Sicht oder wegen persönlicher Bedürfnisse).
da könnt man per url folgendes machen:

http://[domain]/[pfad]/login.php?name=namedesadmins&pwd=bla' OR id='1'

und zack müsste man eingeloggt sein.
Darüber gibt es hier auch (recht aktuelle) andere Meinungen. ;)
 
Wo?^^ ma suchen gehn... Ich lass mich gern eines besseren belehren, aber da ich damit (bei meinen eigenen Scripten und auch bei fremden) schon erfolg hatte, denke ich mal darf man das auch weiterhin nich ausser acht lassen^^
 
hi TchiboMann
http://[domain]/[pfad]/login.php?name=namedesadmins&pwd=bla' OR id='1'
PHP:
$sql = "SELECT ". 
    "Id, Nickname, Nachname, Vorname ". 
  "FROM ". 
    "benutzerdaten ". 
  "WHERE ". 
    "(Nickname like '".mysql_real_escape_string($name)."') AND ". 
    "(Kennwort = '".md5 ($pwd)."')";

Hast du das schon mal ausbrobiert wie soll das gehen mit dem kommt er sicher net rein weil kein Daten satzt dann gefunden wird.
Die Sql Anweisung würde dann heissen:
PHP:
SELECT Id, Nickname, Nachname, Vorname ". 
  "FROM benutzerdaten WHERE ". 
    "(Nickname like '".namedesadmins."') AND ". 
    "(Kennwort = '".md5 (bla'or id='1)."')";

Da kommt maximal ein fehler im Sql stateman raus oder keinen Datensatz gefunden.
Wie soll er mit so einen Sql abfrage zugang bekommen?
Da müßte der Sql befehl schon so heißen damit er zu gang hat
Select Id, Nickname, Nachname, Vorname from benutzerdaten where Id=1;

Er wir weder einen daten satzt in der Db finden der pw bla ist oder pw 1 ist.
 
Zuletzt bearbeitet:
Also ich habe mir das Script jetzt mal ein wenig angesehen und weiß jetzt nicht was stimmt.
Ist es nun sicher oder eben nicht? Aber schonmal danke für das Tutorial, damit kann man ja schonmal was anfangen.
 
@splasch
ei carramba, ist ein denkfehler meinerseits... lässt sich aber dennoch mit dem Nicknamen machen, geh ich mal stark von aus...

naja, auch ich kann mich mal überlesen, shame on me :D

Dennoch - lieber auf $_REQUEST verzeichen und $_POST nehmen und vor allem alle benutzereingaben auf eventuell schadhaften Code oder Zeichen checken - ich geh lieber auf nummer sicher und check alles, egal ob abruf oder input.
 
@TribunM
Also ich habe mir das Script jetzt mal ein wenig angesehen und weiß jetzt nicht was stimmt.
Ist es nun sicher oder eben nicht? Aber schonmal danke für das Tutorial, damit kann man ja schonmal was anfangen.

Ein klare nein das Script ist nicht sicher.


@TchiboMann

ich selbst habe ein Loginscript entwickelt, bei dem ich 2 sessions nutze - eine PHPSession und eine eigene, die sich alle 60 sekunden erneuert und beim user und in der Datenbank abgespeichert ist. Somit ist es so ziemlich unmöglich den Account zu highjacken, denn einen 128bit schlüssel zu klauen oder nachzubilden dauert weit länger als 60 sekunden. Die PHP-Session dient hierbei eher als zusätzliche Kontrolle und als Userdaten-Speicher

Hört sich interresant an könntes du das näher erleutern wie das ganze Funktionieren.Wie erzeugst du eine 2 Session oder meinst du einer weiter Session Variable die sich alle 60 löscht.Würde gern mehr darüber erfahren.Wie die Schutz masnahme funktioniert und was genau dabei gemacht wird. Bzw Überprüft.
 
Zurück