Bugzilla – Bug 108
passwort vergessen, emails
Last modified: 2009-09-22 13:09:57 CEST
Was ist, wenn ein Student sein Passwort vergißt? Einfache Lösung: Button: neues würfeln und an bekannte Adresse mailen. Problem: auf den Knopf kann jeder drücken bessere Lösung (?): Passwort wird neu gewürfelt und in die Mail geschrieben, aber noch nicht im System gesetzt. In der Mail steht noch ein weiterer zufälliger String, wenn der Student den das nächste mal eingibt, dann wirkt die Änderung, sonst nicht. Vereinfachung (?): dieser Token kann ja auch identisch mit dem neuen Passwort sein. Dann wäre es so: System merkt sich aktuelles und evtl. "zukünftiges" passwort, bei jedem Login akzeptiert es das alte und auch das neue - in dem Moment ersetzt es aber das alte. In der Mitteilungsmail steht dann also: "ein Benutzer mit der IP-Adresse XX.XX.XX.XX hat für Sie ein neues Passwort angefordert. Es ist PPPPPPP. Bei der ersten Benutzung dieses Passworts wird das bisherige ungültig. Falls Sie jedoch Ihr altes Passwort weiter benutzen möchten, dann tun Sie das einfach." Eventuell könnte man das auch als grundsätzlichen Anmeldevorgang nehmen (damit stellt man sicher, daß der Student (wenigstens am Anfang) eine gültige Emailadresse angibt.) Implementierungs-Problem: das tool schickt bis jetzt überhaupt keine mails. Da besteht auch Spam-Gefahr, jemand könnte (mit Script) 10^6 mal auf den Knopf drücken, als denial-of-service-Attacke.
> Es ist auf alle Faelle keine gute Idee, wenn angezeigt wird, an welche > e-Mail-Adresse geschrieben wird. OK, das werde ich wohl so machen, wie du vorschlägst: > "Ein neues Passwort wurde an die zu dieser Matrikelnummer gespeicherten > e-Mail-Adresse gesandt." > Ich sehe das mit dem Mailen derzeit weniger kritisch. von dir kommen ja die mails dann nicht... ich kann aber auch nittka@informatik... als Absender eintragen :-) Ich sehe da ein Spam-Problem: man kann leicht einen neuen Account anlegen mit fremder Mailadresse und diese dann vom autotool zumüllen lassen (auf Knopfdruck). Wenn es dann Ärger gibt, wird ein Verursacher gesucht, und das ist eben der Betreiber des autotool, weil man ja nicht weiß, wer geclickt hat. Grundsätzliche Lösung ist hier nur, daß die jeweilige Einrichtung (z. B. Uni Leipzig) es gestattet, ihr Standard-Authentifizierungssystem (passwortserver o. ä.) zu verwenden. Dann gibt es den gesamten Ärger beim autotool nicht. Ist natürlich eine Datenschutzfrage: es geht sicher *nicht* so, daß das Passwort (für den Uni-Account) ins autotool hineingetippt wird (die Information könnte ich ja anderweitig benutzen).
> was ist mit den Adressen von schon angemeldeten Studenten. > Bei uns ist das in den seltensten Faellen eine studserv-Adresse. > Funktionieren diese also weiter oder ist eine Neuanmeldung noetig? Die funktionieren weiter. Adresse wird nur beim Neu-Eintragen oder Ändern geprüft.
Achtung, derzeit wird beim Passwortversenden immer noch die e-mail-Adresse zum Account angezeigt. Das erlaubt es jedem anhand einer Matrikelnummerliste (z.B. Prüfungsergebnisse) e-mail-Adressen zu sammeln und ggf. die dazugehörigen Namen herauszubekommen. Bezüglich Spamproblem hast Du mich überzeugt (bitte nicht meine Adresse als Absender eintragen ;-)). Vorschlag: Passwortmail maximal einmal pro Tag und account. Passwortzusenden geht nur, wenn man in einer Veranstaltung eingetragen ist. In dem Fall kann man dann nicht einfach ein Account eröffnen und das zum Spammen benutzen und die Einschreibefrist ist ja zeitlich begrenzt.
die härtere Variante ist: passwortmailen geht überhaupt nur einmal, dann muß das neue wenigstens einmal benutzt werden: wrong_password stud = do plain "Passwort falsch." par if ( Inter.Crypt.is_empty $ T.next_password stud ) then ask_pwmail stud else plain $ unlines [ "Sie haben eine Email mit einem neuen Passwort erhalten," , "aber Sie haben dieses neue Passwort noch nicht benutzt." ]
und wenn nach Mailing eines neuen das alte doch weiter benutzt wird, dann wird das neue gelöscht. use_first_passwort stud = if ( Inter.Crypt.is_empty $ next_passwort stud ) then return stud -- ändert sich nichts else do plain $ unlines [ "Sie hatten eine Email mit einem neuen Passwort erhalten," , "aber Sie haben jetzt Ihr altes Passwort benutzt." , "Das Passwort aus der Email wird dadurch ungültig," , "Ihr bestehendes (jetzt benutztes) Passwort bleibt gültig." ] let neu = stud { T.next_passwort = Inter.Crypt.empty } io $ Control.Student.DB.put ( Just $ T.snr stud ) neu return neu
*** Bug 228 has been marked as a duplicate of this bug. ***