sandboxgangster / Part-DB

Electronic Parts Database
24 stars 10 forks source link

Änderung des Password Hashalgorithmus #50

Open jbtronics opened 7 years ago

jbtronics commented 7 years ago

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.

susnux commented 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.

jbtronics commented 7 years ago

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.

ubruhin commented 7 years ago

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.

jbtronics commented 7 years ago

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.