Open jbtronics opened 7 years ago
Auf jeden Fall eine gute Idee, immerhin momentan noch besser als MD5. Aber das größte Problem ist nicht der Algorithmus, sha256 brutforcen dauert SEHR lange. Das Problem ist es muss ein Salt benutzt werden weil sind kann man es einfach per Rainbow Tabelle knacken.
Soweit ich weiß wird ja schon ein Salt benutzt, der ist aber leider fix eincompiliert... Wahrscheinlich wäre es sinnvoll den Salt zufällig zu generieren, und dann in die config datei zu schreiben und dass für die Passworthashes zu verwenden. Dann verhindert man, dass jemand eine Rainbowtable für den Part-DB salt erzeugt und dann alle Part-DB hashes auf einmal knacken kann.
Die nativen PHP funktionen password_hash()
und password_verify()
wären sicher zu bevorzugen, da diese wohl maximale Sicherheit mit minimalem Aufwand bieten (z.B. werden anscheinend Stringvergleiche mit konstanter Laufzeit verwendet).
Leider sind diese Funktionen erst ab PHP 5.5 verfügbar, Part-DB unterstützt bisher aber auch noch PHP 5.3...
Wichtig ist auf jeden Fall dass bestehende Part-DB Installationen nach einem Update von Part-DB selbst und/oder von PHP weiterhin funktioniert, also dass der Benutzer nichts davon merkt. Erst wenn das Admin-Passwort geändert wird und PHP >= 5.5 vorhanden ist, kann/soll das neue Passwort-API verwendet werden.
Ist halt die Frage, ob in wie weit es noch sinnvoll ist alle Versionen unter PHP 5.5 zu supporten, PHP 5.3 ist 2009 erschienen und wird seit 2014 nicht mehr weiterentwickelt...
Man müsste dann halt abwägen, ob es wert ist die alten Versionen nicht mehr zu unterstützen, um neue Funktionen zu haben. Zumindest jetzt ist, dass Sicherheitsproblem ja nur sehr theoretisch, man könnte es ja auch so machen, dass auf PHP 5.5+ die nativen Funktionen verwendet werden, auf vorherigen Versionen dann die alte Variante.
Part-DB nutzt zur als Hashfunktion für das Admin Passwort SHA256 mit der hash() funktion. Die PHP-Website (http://php.net/manual/de/faq.passwords.php) empfiehlt dies so nicht einzusetzen, sondern z.B. password_hash(), dass momentan mit bcrypt arbeitet, welches als sicherer als SHA256 eingestuft wird. Bei falsch konfigurierten/nicht funktionierenden .htaccess, könnten Angreifer den Password Hash auslesen und (mit viel Aufwand) das Passwort ermitteln. Dies ist momentan zwar noch kein monumentales Sicherheitsproblem, sollte aber beachtet werden, vor allem falls ein Usersystem implementiert werden sollte.