Ich bin total neu zu PHP
und mySQL
und ich baute ein kleines Login-Formular für meine Website. Da die Beschreibungen im Internet für solch eine Sache viel umfangreicher sind, möchte ich Sie nur fragen, ob dies eine sichere Möglichkeit ist, es zu tun, da es nur ein paar Zeilen war und es funktioniert:PHP und mySQL Login Sicherheit Zweifel
Zuerst erstelle ich ein Tabelle in phpMyAdmin
mit Benutzername und Passwort (Hash mit MD5). Danach starte ich den Login auf der Website mit dem folgenden Skript, wo die $_POST
Sachen von einem Formular kommen.
<?php
session_start();
$db = @mysqli_connect("...", "...", "...") or
die("Connection failed!");
mysqli_select_db($db,'...');
if(isset($_POST['username']))
{
$_SESSION['user'] = $_POST['username'];
$_SESSION['password'] = md5($_POST['password']);
$user = $_SESSION['user'];
$password = $_SESSION['password'];
$sql = "SELECT * FROM logins WHERE username = \"$user\"";
$result = $db->query($sql);
$row = $result->fetch_assoc();
if($row["password"] == $password)
{
$_SESSION['logged'] = "loggedin";
}
}
?>
Das Logout-Skript ist sehr einfach.
<?php
session_start();
session_destroy();
unset($_SESSION['user']);
unset($_SESSION['password']);
header('Location: ../index.php');
?>
Außerdem beschränke ich jeden private Inhalte mit
<?php
if (isset($_SESSION['logged']))
{
$temp = $_SESSION["user"];
echo "Hello $temp, nice to see you!";
}
?>
oder ich eine Umleitung zu machen.
hier sind also meine Fragen:
- Ist dies ein sicherer Weg, es zu tun? Kann es leicht gehackt werden?
- Welchen Sinn macht MD5, wenn eine reverse lookup möglich ist?
Vielen Dank!
Die erste Frage ist wahrscheinlich besser geeignet für [Code Review] (http://codereview.stackexchange.com/) –
Sie sollten [MD5 Passwort Hashes] (http: //security.stackexchange) nicht verwenden.com/questions/19906/is-md5-assered-unsichere) und Sie sollten wirklich PHP [integrierte Funktionen] (http://jayblanchard.net/proper_password_hashing_with_PHP.html) verwenden, um die Passwortsicherheit zu behandeln. Stellen Sie sicher, dass Sie [Passwörter nicht umgehen] (http://stackoverflow.com/q/36628418/1011527) oder verwenden Sie einen anderen Bereinigungsmechanismus vor dem Hashing. Wenn Sie dies tun, * ändert * das Passwort und verursacht unnötige zusätzliche Codierung. –
[Little Bobby] (http://bobby-tables.com/) sagt [Ihr Skript ist für SQL Injection Attacks gefährdet.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent -sql-injection-in-php) Erfahren Sie mehr über [vorbereitete] (http://en.wikipedia.org/wiki/Prepared_statement) Anweisungen für [MySQLi] (http://php.net/manual/en/mysqli.quickstart .prepared-statements.php). Sogar [die Zeichenfolge zu entkommen] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) ist nicht sicher! –