PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie sicher ist die Variablenübergabe mittels POST bei php?


[Dirk]
2011-01-05, 21:33:26
Frage siehe oben :) Ich habe nur eine kleine Passwortabfrage mittels POST realisiert. Wie sicher ist das Ganze? D.h. mir ist es wichtig, dass sich niemand sonst einloggen kann.

Gast
2011-01-05, 22:40:06
Wie ist das Passwort? Dann kann ich dir sagen wie sicher es ist ;)

[Dirk]
2011-01-05, 23:28:55
haha :) Ich wollte nur wissen, ob man die Passwortabfrage irgendwie mit relativ einfachen Mitteln umgehen oder hacken kann.

Sephiroth
2011-01-06, 00:08:08
Jeder der den Datenverkehr abhören kann, kann die Daten (also dein Passwort) im Klartext lesen. Passwörter sollten auch nicht im Klartext in einer Datenbank o.ä. gespeichert werden.

AlecWhite
2011-01-06, 00:40:18
;8488134']haha :) Ich wollte nur wissen, ob man die Passwortabfrage irgendwie mit relativ einfachen Mitteln umgehen oder hacken kann.
Das kommt nicht darauf an, wie das PW übergeben wird, sondern wie es geprüft wird. Ohne Quellcode kann dir da wohl niemand Auskunft geben. Mit dem entsprechenden Code-Schnipsel kann man wohl schon etwas anfangen.

Sicher ist der Transport per HTTP nicht - jeder der den Traffic mitschneidet sieht das PW in Klartext.

Marscel
2011-01-06, 13:17:40
Wenn es dir ganz wichtig ist, dass niemand die Zugangsdaten abfangen kann, dann reicht HTTP nicht aus.

Und ansonsten: natürlich, SQL-Injections, wenn du mit einer DB arbeiten solltest oder register_globals=on (gibts das eigentlich immer noch?) sind eben Fälle, die man berücksichtigen sollte.

[Dirk]
2011-01-06, 22:12:21
register_globals=on Ich dachte das wäre standardgemäßt ausgeschaltet. Werd mal nachsehen. Ok, dann man das Passwort wenn ich es als Klartextsende abfangen kann, ist klar. Aber wie sieht es mit der sicherheit des php codes aus? Wenn ich da jetzt einfach schreibe:


$pw="passwort";

if ($_POST["pwd"]==$pw) {
Machirgendwas;
}
else {
Machirgendwasanderes;
}


Kann man dann die Variable $pw irgendwie von außen auslesen?

sei laut
2011-01-06, 22:34:56
Aus der dieser php Datei selbst kann die Variable nicht ausgelesen werden, da der Webserver die Datei immer vorher verarbeitet. An die php Datei kommt man also nur, wenn man den Webserver umgehen würde. Wenn man aber das Szenario ebenfalls außen vorlässt..

PatkIllA
2011-01-06, 23:03:19
Es kommt aber schon öfters mal vor, dass der PHP Parser ausfällt und man dann die Datei so lesen kann. Da ist es besser die kritischen Daten in einen unterordner zu packen mit include einzubinden und den Ordner dann per htaccess komplett für den Zugriff zu sperren.

Gast
2011-01-16, 23:15:08
$pw="sha1_hash_mit_40_zeichen_von_0_bis_9_und_a_bis_f";

if (sha1($_POST["pwd"])==$pw) {
Machirgendwas;
}
else {
Machirgendwasanderes;
}


Bei "gutem" Passwort dauert es länger den Hash zurück zurechnen. Im Netz findest zu Hauf Seiten, die sha1-Hashes ausgeben können. Ansonsten kannst du natürlich auch "echo sha1("meintollesgeheimespasswort");" schreiben, im Browser aufrufen und den Hash nach $pw einfügen. Es gibt auch Javascripts, die vor dem Versand des Formulars dieses hashen und nur diesen per HTTP übertragen.

AlecWhite
2011-01-16, 23:51:14
Es bringt rein gar nichts, das PW client seitig zu hashen und dann an den Server zu senden. Wenn dann müsste der Server vorher eine Challenge senden und der Client die Eingabe entsprechend verarbeiten. Weitere Infos: http://de.wikipedia.org/wiki/CRAM-MD5

Würde man nur den Hash senden, wäre das PW zwar weiterhin verdeckt, aber der Angreifer könnte sich immer noch einloggen, in dem er einfach den hash an den Server sendet.

Es kommt aber schon öfters mal vor, dass der PHP Parser ausfällt und man dann die Datei so lesen kann. Da ist es besser die kritischen Daten in einen unterordner zu packen mit include einzubinden und den Ordner dann per htaccess komplett für den Zugriff zu sperren.

Dem stimme ich prinzipiell zu. Includes gehören aber sowieso nicht ins Verzeichnisse, welche unterhalb des Document Roots liegen.

@TE:

<?php
define("PWD",md5("passwort"),true);

if (md5($_POST["pwd"])==PWD) {
Machirgendwas;
}
else {
Machirgendwasanderes;
}


ist besser. Statt einer Variablen besser eine Konstante verwenden.

Wie bereits oben angesprochen: Die Datei mit dem Passwort in ein von außen nicht erreichbaren Ordner tun und dann includen. Fort Knox ist das ganze zwar immer noch nicht, aber es ist ausreichend sicher (und du hast ja sicherlich nicht vor irgendeine sicherheitskritische Applikation zu schreiben, welche diversen Attacken ausgesetzt ist, oder?).

Überlege gerade, ob sich durch geschicktes faken der Parameter eventuell sowas wie ein print_r($GLOBALS) bzw. anderer Code ausführen lässt.