PHP: passwort verbergen?
ich habe ein PHP-script wo ein passwort steht. kann ich davon vielleicht irgendwie eine hash erstellen und diese dann vom php-script nutzen lassen ? dass das nicht im klartext da steht.
5 Antworten
ja. passwörter sollten generell nur gehashed gespeichert werden und dann bei der passwortüberprüfung die beiden hashes überprüft werden.
normal stehen die passwörter dann natürlich in einer datenbank.
außerdem solltest du das passwort auch salzen. heißt du hängst an das passwort noch einen zufälligen string der im cleartext zusätzlich zum gehashten passwort gespeichert wird. bei der prüfung hängst du dann das "salz" wieder an das eigegebene password und vergleichst dann wieder beide hashwerte.
so wird verhindert dass oft genutzte passwörter direkt aus dem hashwert gelesen werden können da dieser bekannt ist. beispielsweise hat "test" einen md5 hashwert von 098f6bcd4621d373cade4e832627b4f6
sieht ein angreifer nun diesen hashwert in der datenbank weiß er dass das passwort test ist. hättest du allerdings "test9vASD" gehasht und dann 4bdcfd3c07e42918f4d9915c2cfb1816 und 9vASD gespeichert hättest du das ganze verhindert.
Deine Frage ist ungenau gestellt. Hier geht erst mal jeder davon aus, dass du ein Passwort validieren möchtest das von einem User eingegeben wird. Wenn du das Passwort im Skript stehen hast um bspw. zu einer Datenbank zu verbinden kannst du nichts verschlüsseln. Am sichersten ist es wenn du das Passwort in einer Datei ausserhalb des Document-Roots ablegst (also so, dass es von außen per Browser unerreichbar ist).
Okay, da es um die DB-Zugangsdaten geht:
Lagere sie in eien eigene Datei aus, die außerhalb des Webroot liegt, aber vom Webserver gelesen werden kann. So verhinderst Du schonmal effektiv, daß die Datei über einen direkten Request ausgeliefert werden kann.
Es würde übrigens auch nichts bringen das PW gehashed abzulegen, denn wenn ich die Credentials habe, kann ich mich eh damit anmelden, egal wie sie aussehen.
$password = "hierDasPasswort";
$hash = password_hash($password, PASSWORD_DEFAULT);
//$hash ist nun der hash
Zum überprüfen, ob das Passwort richtig eingegeben wurde:
$password = "dasEingegebeneKennwort";
if(password_verify($password, $hash)) {
//das passwort ist richtig
} else {
//das passwort ist falsch
}
Was genau willst du?
Um dich mit einer Datenbank zu verbinden, musst du das Passwort nicht hashen.
ich will das passwort was da steht nicht im klartext stehen haben
Und wieso? Du baust da doch nur die Verbindung zur Datenbank auf, oder?
ja! da gibt es verschiedene methoden ... gängig ist md5('passwort');
mach einfach mal ein echo md5('123456'); und schaue was dabei rauskommt :-)
nein das passwort im script!
<?php
$pdo=new PDO('mysql:host=localhost;dbname=db1','db1','PASSWORT_HIER', ...
?>
wofür soll das gut sein?
php-dateien kann man nur auslesen, wenn man direkten zugriff auf den server, bzw. die datei hat!
nein das passwort im script!