Naja - ich habe mir nur das erste Teil angesehen - aber ich bin mit nicht sicher, was da erwartet wird. Man soll das alte mit dem neuen vergleichen. Beim alten gibt es keine Implementation (Security Issue - wenn die Implementation fehlt, dann wirft man eine NotImplementedException!) Und dann wird einem sonst was unleserliches vorgesetzt. Alles was man bewerten könnte, soll man entweder nicht bewerten oder man soll davon ausgehen, dass es ok ist oder es gibt keine Information dazu:
-> Der Code selbst ist ja nicht zu bewerten.
-> Tests sind alle ok - somit muss man bei der Funktionalität nichts prüfen.
-> Tests selbst kennen wird nicht - daher müssen wir davon ausgehen, dass diese vollständig sind.
Was bitte soll man dann noch bewerten?
Offensichtliche Probleme ggf.? Sowas wie: registerUser enthält einen salt, der mit in der Datenbank gespeichert wird. Die generateHash() nutzt aber immer einen neu erzeigten SALT, der nicht gemerkt wird? Aber nein - das ist ja wieder Funktion -> Die Unit Tests werden doch hoffentlich das Speichern der Passworts (als Hash) und den Passwort-Check abdecken....
Also ok, bleibt das "Hurra - es wurde ein prepared Statement verwendet!"
Und dann schaut man sich die Fragen an:
"Are minimum and maximum password lengths enforced?"
Ja, soll ich nun davon ausgehen, dass die Tests erfolgreich waren oder nicht? Das sind doch alles Dinge, für die hoffentlich Unit Tests existieren. Und die Funktionalität soll doch sicher gestellt sein!
"Is sensitive data logged in a masked, sanitized, hashed, or encrypted state?"
Ja, zum Glück muss man nur ein einziges Log-Statement betrachten. Was wird jetzt getestet? Ob ich weiss, ob PreparedStatement::toString() übergebene Parameter mit ausgibt oder nicht?
"Is the set of allowed characters for passwords limited?"
Hmm ... Was soll ich da antworten? Natürlich ist es limitiert ... ein char hat nur 16 Bit ... mehr kriegt man da nicht rein. Und das UTF-16 Charset nimmt maximal 2 16 Bit Zahlen ... Also ja - das ist eine deutliche Limitierung.
Ja, sorry - die Frage soll natürlich darauf hinaus, ob man Reguläre Exceptions verstanden hat ... was macht so ein (?=.*[Zeichen]).* nur...
Also ich denke, dass es verständlich ist, wenn ich dies nicht weiter anschauen werde ...