Passwortsicherheit in Webanwendungen mit Phpass

Status
Für weitere Antworten geschlossen.

blueangel1610

Benutzer
Mitglied seit
23. Feb 2011
Beiträge
134
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich möchte gerne wie in diesem Artikel beschrieben http://www.admin-magazin.de/Das-Heft/2011/05/Passwortsicherheit-in-Webanwendungen-mit-Phpass einbinden. Dazu habe ich in meiner *.php-Datei include('../www/PasswordHash.php'); eingebunden. Allerdings erhalte ich nun folgende Fehlermeldung:

Warning: is_readable(): open_basedir restriction in effect. File(/dev/urandom) is not within the allowed path(s): (/etc:/etc.defaults:/tmp:/usr/bin/php:/usr/syno/synoman:/var/packages/MailStation/target/roundcubemail:/var/run:/var/services/blog:/var/services/homes:/var/services/photo:/var/services/web:/var/spool/php:/volume1/@tmp/php) in /volume1/homes/alnatura/www/PasswordHash.php on line 51

Jemand ne Idee was mir das sagen soll?
 

blueangel1610

Benutzer
Mitglied seit
23. Feb 2011
Beiträge
134
Punkte für Reaktionen
0
Punkte
0
Sowas in die Richtung dachte ich mir schon.
Aber was genau muss ich dort nun eintragen?
 

blueangel1610

Benutzer
Mitglied seit
23. Feb 2011
Beiträge
134
Punkte für Reaktionen
0
Punkte
0
Es wird eine function aufgerufen:

function get_random_bytes($count)
{
$output = '';
if (is_readable('/dev/urandom') &&
($fh = @fopen('/dev/urandom', 'rb'))) {
$output = fread($fh, $count);
fclose($fh);
}

if (strlen($output) < $count) {
$output = '';
for ($i = 0; $i < $count; $i += 16) {
$this->random_state =
md5(microtime() . $this->random_state);
$output .=
pack('H*', md5($this->random_state));
}
$output = substr($output, 0, $count);
}

return $output;
}

Diese versucht offensichtlich auf '/dev/urandom' zuzugreifen. Grundsätzliche Frage: Existiert dieses Verzeichnis überhaupt standardmäßig? Was könnte in dieser Datei sein? Lt. Name der function versucht er sich dort zufällig Bytes zu holen, die dann zum generieren eines PasswordHashes fungieren.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
ich wäre nicht sicher, dass dieses device (urandom) überhaupt existiert auf einer DS. urandom ist ein Gerät und spuckt Zufallswerte aus
 

joku

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
6.664
Punkte für Reaktionen
2
Punkte
164
Diese versucht offensichtlich auf '/dev/urandom' zuzugreifen. Grundsätzliche Frage: Existiert dieses Verzeichnis überhaupt standardmäßig?
Ja, das Device existiert.
Was könnte in dieser Datei sein? Lt. Name der function versucht er sich dort zufällig Bytes zu holen, die dann zum generieren eines PasswordHashes fungieren.
Wie Du schreibts, Zufallszahlen erzeugen.
Hast Du mal versuch bei open_basedir, den Pfad vom dem Script mit einzutragen ?
 

blueangel1610

Benutzer
Mitglied seit
23. Feb 2011
Beiträge
134
Punkte für Reaktionen
0
Punkte
0
Ja, das Device existiert.
Hast Du mal versuch bei open_basedir, den Pfad vom dem Script mit einzutragen ?

Genau da habe ich ein Problem. Ich weiß nicht genau wie die schreibweise zu lauten hat, um das der Zeile anzufügen.
Ich weiß lediglich das ich einen neuen Eintrag mit Doppelpunkten beginnen muss.

Die Datei liegt unter: '/volume1/homes/xxx/www/PasswordHash.php'
 

blueangel1610

Benutzer
Mitglied seit
23. Feb 2011
Beiträge
134
Punkte für Reaktionen
0
Punkte
0
In der Tat. Wir haben damit einen Teilerfolg errungen.
Er scheint nun das Passwort offensichtlich korrekt zu verschlüsseln: $2a$08$jR6ovMoFN/JwyNypn4imKegSn

Die beiden Zeichen hinter dem ersten Dollarzeichen verraten die verwendete Hashfunktion. Hier weist »2a« auf Bcrypt hin. Die Zahl nach dem zweiten Dollarzeichen gibt an, wie oft diese Hash-Funktion hintereinander aufgerufen wurde (als Potenz von 2, im Beispiel also 2^8 = 256 mal). Anschließend folgt das Salt, dessen Länge vom Hashverfahren abhängt, bei Bcrypt ist es 16-stellig. Dahinter steht schließlich der eigentliche Hashwert.

Allerdings erhalte ich noch immer die hässliche Fehlermeldung die nun wie folgt lautet:

Warning: is_readable(): open_basedir restriction in effect. File(/dev/urandom) is not within the allowed path(s): (/etc:/etc.defaults:/tmp:/usr/bin/php:/usr/syno/synoman:/var/packages/MailStation/target/roundcubemail:/var/run:/var/services/blog:/var/services/homes:/var/services/photo:/var/services/web:/var/spool/php:/volume1/@tmp/php:/volume1/homes/alnatura/www) in /volume1/homes/alnatura/www/PasswordHash.php on line 51
 

joku

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
6.664
Punkte für Reaktionen
2
Punkte
164
Warning: is_readable(): open_basedir restriction in effect. File(/dev/urandom) is not within the allowed path(s)
Wie es aussieht darf Dein Script das Gerät nicht benutzen.
Willst Du nur Verzeichnisse schützen oder Webseiten ?
Da gibt es einfachere Sachen, wie .htuser und .htgroups
 

blueangel1610

Benutzer
Mitglied seit
23. Feb 2011
Beiträge
134
Punkte für Reaktionen
0
Punkte
0
Ich will eigentlich gar nichts schützen.
Das Skript soll nur die Passwörter besser verschlüsseln als der Standard md5.
 

blueangel1610

Benutzer
Mitglied seit
23. Feb 2011
Beiträge
134
Punkte für Reaktionen
0
Punkte
0
Nein.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ich will eigentlich gar nichts schützen.
Das Skript soll nur die Passwörter besser verschlüsseln als der Standard md5.
md5 ist keine Verschlüsselung sondern ein Hash. Eine Verschlüsselung macht aus, dass man sie rückgängig machen kann, um den Klartext lesen zu können. Eine Hash Funktion ist normalerweise eine Einwegfunktion d.h. nicht umkehrbar.
Letztlich kannst du als Programmierer in PHP ja genau sagen welche Hashfunktion du verwenden willst. Wenn du md5 nicht magst, nimmst du einfach z.B. sha1
 

blueangel1610

Benutzer
Mitglied seit
23. Feb 2011
Beiträge
134
Punkte für Reaktionen
0
Punkte
0
Das es sich bei md5 um keine Verschlüsselung sondern um einen Hash-Wert ist mir klar. Dabei habe ich mich wohl etwas unglücklich geäußert.
Ich möchte aber gerne auf Phpass setzen, weil es sich dabei nicht nur um einen einfach zurückzurechnenden Hash-Wert handelt, sondern die Hash-Funktion "Bcrypt" nutzt und zusätzlich den Hash-Wert noch salted. Das alles macht dieses Phpass für mich, sodass ich mich nicht mehr darum kümmern muss.

Ich habe auch gerade mal recherchiert was urandom überhaupt ist.
Gibt es keine Möglichkeit diese bestimmte Datei zu implementieren oder qualitativ gleichwertig zu ersetzen?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ich möchte aber gerne auf Phpass setzen, weil es sich dabei nicht nur um einen einfach zurückzurechnenden Hash-Wert handelt, sondern die Hash-Funktion "Bcrypt" nutzt und zusätzlich den Hash-Wert noch salted.
Hashes können nicht zurückgerechnet werden, niemals ;-)
Zudem darfst du den Salt nicht überschätzen. Dieser verringert nicht die Wahrscheinlichkeit, dass ein PW durch BruteForce gebrochen werden kann d.h. egal wie lang das PW ist und ob es mit oder ohne Salt ist, es gibt immer die genau gleiche Anzahl Möglichkeiten für den Klartext.
Der einzige zusätzliche Schutz durch den Salt ist es, dass zwei identische Passworte nicht denselben Hash ergeben. Dieser Schutz kommt aber eigentlich erst dann zum Tragen, wenn dir jemand deine DB resp den Inhalt mit den Hashes mopst :)

Wegen urandom: habe mal auf meiner DS (408 DSM 3.2) nachgeguckt und bei mir ist das "File" vorhanden
 

blueangel1610

Benutzer
Mitglied seit
23. Feb 2011
Beiträge
134
Punkte für Reaktionen
0
Punkte
0
Ich bin auf dem Gebiet von Telnet wirklich nicht bewandert.
Aber ich habe gerade auch mal geschaut, siehe Screenshot.

Das bedeutet doch das diese Datei vorhanden ist?
28-03-2012 18-46-13.jpg

Wenn dem so ist, stellt sich mir nur noch die Frage wieso ich dann diese Fehlermeldung erhalten habe?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
wenn du mit dem Fehler die Meldung bezüglich openbasedir meinst, dann liegt es daran dass php nicht auf /dev/urandom zugreifen darf. Den openbasedir kann man im DSM anpassen. Probiers einfach indem du im DSM in den PHP Einstellungen dem openbasedir einfach ein /dev/urandom: voranstellst. Der Doppelpunkt ist wichtig und trennt einzelne Muster für Verzeichnisse und Dateien, die PHP erreichen darf
 

blueangel1610

Benutzer
Mitglied seit
23. Feb 2011
Beiträge
134
Punkte für Reaktionen
0
Punkte
0
Gut das wir darüber gesprochen habe. Das war vor deinem Post auch mein Einfall.
Ich wollte gerade berichten das es nun funktioniert.

Jetzt funktioniert ja alles wieder wie es soll. Wunderbar.
Nur was hat das nun noch gleich mit dem Sicherheitsaspekt auf sich, gemäß folgendem Zitat:

Du kennst die Probleme mit open_basedir?

Zum beinahen Abschluss dieses Problem möchte ich mich bei euch für eure Hilfe bedanken. Ihr seid echt super(!) :)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat