Im Rahmen einer Zwei-Faktor-Authentifizierung kann auf serverseitig generierte Einmalkennwörter gesetzt werden. Zunächst loggt sich der Benutzer ganz traditionell mit seinen Benutzerdaten ein. Im Anschluss bekommt er das Einmalpasswort auf seinen zweiten Faktor geschickt, also z. B. per E-Mail oder SMS. Nur, wenn der User nach dem Login das richtige Einmalpasswort eingeben kann, wird er authentifiziert. Die Verwendung von Einmalpasswörtern ist deshalb immer dann zu empfehlen, wenn ein Online-Dienst besonders sensible Daten verwendet.
Ein one time passwort (OTP) in PHP zu generieren, ist ziemlich einfach. Für den Fall, dass das Einmalpasswort nicht kopiert werden kann sondern abgetippt werden muss, sollten im Einmalkennwort Buchstaben und Zahlen, die sich ähnlich sehen können (z. B. 1 und l, O und 0), nicht verwendet werden. Die Funktion, um ein solches Kennwort zu generieren, sieht wie folgt aus:
function generateOtp(int $length = 8): string
{
$otpchars = 'abcdefghjkmnppqrstuvwxyzABCDEFGHJKLMNPQRTUVWXYZ2346789';
$otp = '';
for ($i = 0; $i < 8; $i++) {
$otp .= substr($otpchars, (rand() % (strlen($otpchars))), 1);
}
return $otp;
}
Wichtig ist natürlich, das Einmalkennwort mit einem Zeitablauf zu versehen, sodass es, sofern nach ein paar Minuten kein Login erfolgt ist, seine Gültigkeit verliert. Außerdem darf das Einmalpasswort auch nur für eine einzige Verwendung gültig sein; entsprechend erfordert jeder neue Login des Users auch ein neues Einmalkennwort.