2016-04-19 11 views
-1

Ich sah viele Beispiele über login Skripte in php language, aber alle Beispiele waren anders ... Ich möchte nur Sie fragen, richtig oder nein. Ist es sicher, es so zu benutzen? Hier ist mein Code:Wenn angemeldet Inhalt in PHP anzeigen

Die Seite, wo Sie index.php einloggen:

<!DOCTYPE html> 
<html> 

<head> 
    <title>LOGIN PAGE</title> 
</head> 

<body> 

    <form action="login.php" method="post"> 
    Login: <br> 
    <input name="login" type="text" /><br> 
    Password: <br> 
    <input name="pass" type="text" /><br> 
     <br> 
    <input type="submit" value="Log in!" /> 
    </form> 

</body> 
</html> 

Zweite Seite, wo ich überprüfen, ob username/password korrekt sind und setzen $_SESSION['logged'] zu true (Wenn es OK natürlich ....) login.php

<?php 
if($_POST['login'] == 'user' && $_POST['pass'] = 'demo'){ 
session_start(); 
$_SESSION['logged'] = true; 
header('Location: loged.php'); 
} else { 
echo "Wrong password or username"; 
} 

?> 

Und der letzte ist der Inhalt nach der Anmeldung zeigen logged.php

<?php 
    session_start(); 
    if($_SESSION['logged']){ 
    /* Various things like ADD NEW ITEM to database, delete database record and etc */ 
    echo "Here is your admin panel"; 
    } else { 
    echo "You have to login first"; 
    } 

    ?> 

Also meine Frage ist: Ist dieser Weg richtig zu verwenden und ist es sicher genug, um live verwendet zu werden? Danke für deine Antworten!!!

+3

Es scheint, dass Ihr Code derzeit funktioniert, und Sie suchen, um es zu verbessern. Im Allgemeinen sind diese Fragen für diese Site zu eigenartig, aber Sie finden vielleicht mehr Glück bei [CodeReview.SE] (http://codereview.stackexchange.com/tour). Denken Sie daran, [ihre Anforderungen] (http://codereview.stackexchange.com/help/on-topic) zu lesen, da sie etwas strenger sind als diese Site. –

+0

@ Mr.Llama wow, danke Kumpel. Habe diese Seite noch nie gesehen. Ich werde es zu meinen Favoriten hinzufügen ... lol :-) Hoffe immer noch, Antworten hier zu bekommen, da ich diese Seite sehr mag :-)) –

Antwort

1

"Sicher" ist ein relativer Begriff, aber im Allgemeinen ist dieses Modell nicht sehr sicher, nein. Es ist sicherer, wenn:

  • Sie <input type=password> statt <input type=text> für das Passwort-Feld verwenden
  • Sie SSL verwenden (diese werden die eingegebenen Buchstaben unsichtbar machen) (HTTPS) auf die Webseite zu verschlüsseln, zumindest wenn das Passwort wird gesendet
  • Sie speichern das Kennwort nicht direkt in der Datenbank, sondern speichern stattdessen einen Einweg-Hash; Wenn Sie dann das Passwort auf Korrektheit testen, hashen Sie es auf die gleiche Weise und vergleichen Sie dann die Ergebnisse - SHA1 ist ein gängiger Hash dafür, MD5 ist besser als gar nichts.
+0

Es war nur ein Beispiel ... alle Passwörter werden in der Datenbank gespeichert:) Danke für deine Antwort !! –

1

Eine Verbesserung:

  • Es ist immer ratsam, die session_start(); Funktion an der Spitze zu haben. Also würde ich die Reihenfolge in Ihrem Code ändern.

  • Änderung <input type=text> zu <input type=password>

Ich sehe keinen Code, der die ‚user‘ und ‚Demo‘ Informationen aus der Datenbank bekommt, so nehme ich an, dass entweder Sie haben diesen Punkt nicht erreicht noch oder Sie haben bereits diesen Code alle gelöst.

Der Rest scheint in Ordnung zu sein.

+0

Es ist nur ein Beispiel, Passwörter werden in der Datenbank gespeichert (mit MD5). Danke für deine Antwort! –

1

Wenn Sie sicher sind, dass es immer nur eine Kombination aus Benutzer und Passwort geben wird, dann wird es funktionieren. Im Allgemeinen, wenn jemand in der Lage ist, Zugriff auf Ihren Quellcode auf dem Server-Dateisystem zu bekommen, Dinge wie private Schlüssel zu bekommen, ist der Datenbankzugriff sehr möglich, ohne Fehlerberichte oder seltsame Analysefehler.

Andernfalls würde ich empfehlen, eine Datenbank und einen Hash-Wert zu verwenden. Sie könnten sogar den Code dort ändern, um einen fest codierten SHA-2-, PBKDF2- oder BCrypt-Hash zu vergleichen, und dann könnten Sie das Kennwort sicher auf etwas sichereres setzen und es trotzdem fest codieren lassen.

Dies würde aussehen wie

if($_POST['user'] == 'user' && password_verify($_POST['pass'], "$2y$10$3O5QvMNrJpx2QKV8UFieveF/42Pv2itH.wfHBwykXCn5HSVk4DZrm")) { 

Wenn der Hash-Teil im Moment

password_hash('demo', PASSWORD_DEFAULT); 

Ein Problem mit dem Code von gerade erstellt wurde, ist, dass es, dass es lassen würde tatsächlich erscheint jeden Passwort durch, weil $ _POST ['pass'] auf Demo gesetzt wird und dann die Bedingung das zurückgibt. Stellen Sie sicher, dass Sie bei einem Vergleich den Operator double does anstelle des Zuweisungsoperators verwenden.

if($_POST['login'] == 'user' && $_POST['pass'] == 'demo'){ 
+0

Yeah ... '=' anstelle von '==' war meine Schuld ... Ich habe es verpasst: <.. Und natürlich werden Passwörter in der Datenbank gespeichert, als Hashwert. Vielen Dank für Ihre Antwort! –

Verwandte Themen