Frage

Ich mache etwas wie folgt aus:

SELECT * FROM table WHERE user='$user';
$myrow = fetchRow() // previously I inserted a pass to the db using base64_encode ex: WRM2gt3R=

$somepass = base64_encode($_POST['password']);

if($myrow[1] != $somepass) echo 'error';
else echo 'welcome';

Im immer immer Fehler, ich auch echo $ somepass und $ myrow [1] sie sind die gleichen, aber immer noch Fehler. Was mache ich falsch? Dank

War es hilfreich?

Lösung

Versuchen var_dump statt echo -. Vielleicht einen von ihnen einen Raum oder Newline am Anfang / Ende

Edit:

Sie müssen es als CHAR (40) werden die Speicherung: A fixed-length string that is always right-padded with spaces to the specified length when stored

Verwenden VARCHAR oder trim()

Andere Tipps

Wenn $ myrow [1] ist eigentlich das richtige Passwort in Base64-Codierung, ich sehe keine Fehler.

Versuchen Sie, diese ind Ende:

echo "<br />$myrow[1] != $somepass";

Was sagt es?

Und übrigens: Ich sehe keinen Grund, Base64-codiert die Passwörter. Was wollen Sie erreichen?

Ich denke, irgendwie, wenn ich ein var_dump tun () erhalte ich:

string (40) "YWRraM2 =" string (8) "YWRraM2 ="

scheint irgendwie, wenn ich die Daten in die db einfügen mit der Konsole seiner Hinzufügen einen zusätzlichen Raum zum Pass Feld.

myplacedk: Gibt es irgendeinen Grund, warum sollte ich es nicht tun? Ich dachte, es wird eine zusätzliche Leyer Sicherheit hinzufügen?

Diese Codierung macht zwei Dinge:

  1. Sie fügt hinzu, Code, so dass es komplexer und einfacher, Fehler machen
  2. Wenn Sie Ihre Datenbank auf dem Bildschirm anzuzeigen, und jemand schaut über die Schulter, können die Passwörter ein bisschen schwieriger zu erinnern.

Also nein, es fügt wirklich keine Sicherheit. Es ist nur eine Codierung, ist es einfach zu dekodieren.

Vielleicht liegt es Sie verkennen für md5-Hashing oder so ähnlich.

um zu spielen ist großartig, aber wenn es um Sicherheit geht, empfehle ich wirklich nicht etwas, das Sie nicht verstehen. Auf lange Sicht wird es mehr Schaden als gut tun.

Einige Probleme:

  • Von Ihren Kommentaren an anderer Stelle, ich denke, dass das Problem mit dem aktuellen Code ist, dass Ihr Datenbankfeld ist CHAR (40). Ein CHAR-Feld hat immer eine feste Größe. Versuchen Sie, die Datenbank-Feldtyp VARCHAR anstelle von CHAR zu ändern.
  • Mit base64_encode bevor sie in einer Datenbank zu speichern ist längst nicht sicher. Gute Praxis speichert nur einen Einweg-Hash des Passworts in der Datenbank - in der Regel MD5- oder (besser) SHA1. Wenn dann der Benutzer anmelden will, verwenden die gleiche Hash-Funktion auf dem Passwort zur Verfügung gestellt, und dann die beiden Hashes vergleichen.
    Dies hat den zusätzlichen Vorteil, die länger als 40 Zeichen zu mit Passwörtern arbeiten.
    Ein SHA1 oder MD5-Hash nimmt immer eine feste Menge an Speicherplatz, so dass, wenn Sie diesen Weg gehen, müssen Sie nicht Ihre Datenbankspalte wechseln VARCHAR :)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top