Ein großes Paket: ein Sicherheitsaudit (Zugriffe, Injektionen, Konten, Dateien), eine Moderation, die endlich funktioniert — ihre Sanktionen gelten jetzt für alles, was Mitglieder schreiben —, eine neue E-Mail-Adresse, die bestätigt werden muss, bevor sie zählt, das Löschen inaktiver Konten und die reparierte Anmeldung mit Discord, GitHub oder Google. Der Discord-Bot geht auf Version 0.2.5 (siehe sein eigenes Änderungsprotokoll). Auf einer Website mit HTTPS meldet sich nach dem Update jeder einmal neu an: Das Sitzungscookie ändert seinen Namen.
Sicherheit
- Die Forensuche, für Besucher offen, erlaubte eine SQL-Injektion über ein Wort in Anführungszeichen; die Suche der privaten Nachrichten hatte dieselbe Lücke. Dieses Wort wird jetzt wie die anderen bereinigt und von der Datenbank selbst maskiert.
- Eine von einer anderen Website kommende Übermittlung wird abgelehnt (POST, PUT, DELETE…), nach dem, was der
Browser angibt (
Sec-Fetch-Site, sonstOrigin): Eine präparierte Seite kann ein angemeldetes Mitglied nicht mehr ohne sein Wissen handeln lassen. Ein Client ohne Browser — der Bot, ein Zahlungsdienst — ist nicht betroffen. - Zwanzig Aktionen, die über einen einfachen Link etwas änderten, verlangen jetzt das Sitzungstoken oder nehmen nur noch POST an: einem Thema folgen, es zur Ankündigung machen, alles als gelesen markieren, eine Unterhaltung verlassen, archivieren, löschen oder wiederherstellen, reagieren, Benachrichtigungen als gelesen markieren, seine Verfügbarkeit für ein Ereignis angeben, die Website und die Registrierungen öffnen oder schließen, eine Sicherung oder ein Update starten, ein Rekrutierungsfeld löschen… Die Abmeldung über einen Link ohne Token fragt per Schaltfläche nach einer Bestätigung.
- Unter HTTPS hat das Sitzungscookie einer im Stammverzeichnis ihrer Domain installierten Website das Präfix
__Host-: Eine Subdomain (eine Demo, ein Webmail) erhält es nicht mehr und kann keines mehr aufzwingen. Eine in einem Unterordner installierte Website behält ein Cookie ohne dieses Präfix, das nur seinen Namen ändert. - Konten:
- der Link „Passwort vergessen“ funktionierte auch als Bestätigungslink der Registrierung, der zwei Tage lang ohne Nachfrage anmeldet: Jeder Link funktioniert jetzt nur noch für seinen eigenen Zweck;
- das Ändern des Passworts verwirft eine ausstehende neue Adresse und die Links „Passwort vergessen“;
- fehlgeschlagene Anmeldungen werden pro Konto gezählt — wie auch immer es geschrieben wird — und pro Netzwerk: Eine IPv6-Adresse zählt für ihr /64-Netz, bei jeder Versuchsbegrenzung der Website;
- das Einschalten der Zwei-Faktor-Authentifizierung oder das Verknüpfen eines Discord-, GitHub- oder Google-Kontos fragt erneut nach dem Passwort; fünf Fehler sperren diese Bestätigung für eine Viertelstunde;
- „Passwort vergessen“ antwortet gleich, ob eine Adresse registriert ist oder nicht, und die Registrierung sagt nur fünfmal pro Stunde und pro Netzwerk, dass eine Adresse bereits vergeben ist;
- das Anmeldeprotokoll verzeichnet die Adresse der Verbindung, nicht mehr einen Header, den der Browser wählt.
- Zwölf Zugriffslecks geschlossen: der Verlauf und die Revisionen einer Wiki-Seite im Entwurf; die VIP-Kategorien des Forums, über die Suche und die Profile; versteckte Gruppen; das Bild eines geschlossenen Albums; die Matches eines eingeschränkten Typs; die Anwesenheit, die Teilnehmer verborgen hatten; Kommentare und Reaktionen auf verborgenen Inhalten; das Melden einer Unterhaltung, an der man nicht teilnimmt.
- Zwei alte Adressen der privaten Nachrichten lieferten die Nachrichten jeder Unterhaltung, auch privater, an jeden mit Leserecht — Besucher eingeschlossen: entfernt. Das Posten eines Bildes in die Galerie verlangte nur das Recht, das Album zu sehen.
- Die Anhänge des Forums und der Unterhaltungen werden von der Website ausgeliefert, an jeden, der das Thema oder
die Unterhaltung lesen kann, nicht mehr vom Webserver an jeden, der ihre Adresse hatte. Ein Bild oder ein PDF wird
angezeigt, alles andere heruntergeladen; ein Anhang, den ein Browser ausführen würde, wird beim Hochladen abgelehnt.
Unter Apache übernimmt das mitgelieferte
upload/.htaccessdas; unter nginx oder Caddy kopiere die Regel, dieupload/forum/undupload/talks/sperrt, in deine Serverkonfiguration (siehe die mitgeliefertennginx.confundCaddyfile). - Was der Server selbst abruft (Bild-Relay, RSS-Feeds, Webhooks), ist auf streng öffentliche Adressen beschränkt, auf den Ports 80 und 443.
- Die Stripe-Schlüssel sind in der Verwaltung nicht mehr im Klartext lesbar: verschlüsselt gespeichert, nie wieder angezeigt.
- Demo: Die IP-Adressen der Besucher, Hostnamen und verweisenden Websites werden dort nicht mehr angezeigt; eine Werbung, ein Link, ein Partner, der aus der Website hinausführt, wird auf einer Seite gezeigt, die sagt, wohin er führt, statt dorthin umzuleiten.
- Ein
javascript:-Link kann nicht mehr anstelle einer Adresse angezeigt werden: die Seite, von der eine Sitzung kam (Verwaltung), die Links eines Matches (Website des Gegners, Stream, Artikel). Der Link, den eine Meldung zum gemeldeten Inhalt gibt, kann nur zu einer Seite der Website führen.
Hinzugefügt
- Eine neue E-Mail-Adresse wartet auf ihre Bestätigung: Der Link geht an die neue Adresse (zwei Tage gültig), die alte wird benachrichtigt, und „Mein Konto“ bietet an, den Link erneut zu senden oder abzubrechen. Bisher schnitt ein Tippfehler das Mitglied von allem ab, was die Website verschickt.
- Inaktive Konten werden gelöscht: ohne Besuch seit drei Jahren — einstellbar unter Einstellungen,
0für nie —, eine E-Mail warnt das Mitglied einen Monat vorher, ein Besuch hebt alles auf. Nie ein Administrator. - Ein Mitglied sanktionieren, ohne auf eine Meldung zu warten, aus seinem Moderationsverlauf, auf den seine Verwaltungsseite verweist.
- Die Melde-Schaltfläche (das Fähnchen „Diesen Inhalt melden“) im Gästebuch, an Bildern der Galerie, Kleinanzeigen, Tickets und ihren Kommentaren.
- „Meine Sanktionen“ im Mitgliederbereich, für jeden, der im Jahr eine hatte: ihre Art, ihr Grund, ihr Zeitraum.
- Mediation: Ausgehend von einer Meldung schlägt der Moderator eine private Unterhaltung zwischen sich, dem gemeldeten Mitglied und dem Meldenden vor. Das gemeldete Mitglied wird dort sehen, wer es gemeldet hat; sie öffnet sich daher nur mit dem Einverständnis des Meldenden, gegeben auf einer Seite, die erklärt, was er akzeptiert; lehnt er ab, bleibt seine Meldung anonym und läuft wie gewohnt weiter.
Behoben
- Die Moderationssanktionen gelten für alles, was Mitglieder schreiben: Forum, private Nachrichten, Kommentare, Gästebuch, Bugtracker, Rekrutierung, Kleinanzeigen, Galerie, Profil, im Texteditor hochgeladene Bilder. Nur die Stummschaltung im Forum und in den Nachrichten wurde geprüft, und erst nach dem Absenden. Das Formular weicht einem Hinweis, der sagt, was die Sanktion verbietet, bis wann und warum; die Sanktion „Einschränkung: Links“ lehnt einen Text ab, der einen Link enthält, ohne ihn zu verlieren.
- Vom Moderationsbildschirm aus ließ sich keine Sanktion verhängen: Ein interner Fehler verhinderte es, sodass die automatische Eskalation nie auslöste. Gleichzeitig überarbeitet: die Einstellungen (Kästchen, die sich nicht abwählen ließen, Schwelle für verdächtige Meldende), die Geltungsbereiche, die Dauern (eine befristete Sperre ohne Dauer wurde dauerhaft), die Bestätigung durch einen ranghöheren Moderator, das Moderatoren-Panel, doppelte Meldungen, die Seiten ab 2, die IP-Liste. Ein Moderator kann keine Sanktion mehr aufheben, die ihn betrifft, noch die eines Mitglieds gleichen oder höheren Rangs, noch eine, die ein ranghöherer Moderator verhängt hat.
- Der Shadow Ban funktioniert: Was ein mit Shadow Ban belegtes Mitglied schreibt, wird nur ihm und den Moderatoren angezeigt, und nichts wird verbreitet — keine Benachrichtigung, kein Discord, keine Abonnenten.
- Eine zusätzliche Rolle — Moderator — entzog einem Mitglied Rechte: Ein Moderator verlor das Forum und die privaten Nachrichten. Eine Rolle fügt Rechte hinzu, sie entzieht keine mehr.
- E-Mails werden in der Sprache dessen verschickt, der sie erhält — Sanktionen, Antworten im Forum, private Nachrichten —, nicht mehr in der des Mitglieds, das sie ausgelöst hat.
- Die Anmeldung mit Discord, GitHub oder Google schlug fehl, sobald ein Dienst konfiguriert war (die OAuth-Bibliothek hatte sich geändert), und schickte dem Dienst eine Rücksprungadresse, die er ablehnte. Ein abgelehnter Rücksprung sagt jetzt warum, statt einer Fehlerseite, und der Discord-Avatar wird wieder importiert.
- Gästebuch, Verwaltung: Das Freigeben, Ablehnen oder Löschen einer Nachricht führte zu einem Fehler „Seite nicht gefunden“.
- Der Fehler eines Formularfelds steht unter dem Feld, auf einem Telefon wie auf einem Computer: Er war nur in einem Tooltip beim Überfahren lesbar.
- Die obere Leiste der Verwaltung bleibt oben beim Scrollen; auf einem Telefon bleiben nur das Menü und der Brotkrumenpfad fixiert.
- Vierunddreißig Übersetzungsfehler in zwölf Sprachdateien („There are 1 user“, Löschbestätigungen mit
< br / >, englische Plurale…). - Die von 48 Addons des Kerns angegebene Website-Adresse ist die des Projekts, nicht mehr die des ursprünglichen NeoFrag. Die Seite E-Mail-Vorlagen der Verwaltung listet nicht mehr die Vorlagen eines nicht installierten Moduls. Ein Fehler in manchen Formularen (Begrenzung des Gästebuchs erreicht, Kontolöschung, Zwei-Faktor-Authentifizierung, Passwort, Anlegen eines Mitglieds in der Verwaltung) führt nicht mehr zu einem Fehler „Seite nicht gefunden“.
- Demo: Ein gewöhnliches Mitglied konnte kein Thema eröffnen, nirgends antworten und sich auf nichts bewerben.
- Der Export „Meine Daten“ enthält die Meldungen, die das Mitglied gemacht hat: Sie fehlten im Archiv.
Geändert
- Ein an ein Modul gebundenes Widget hängt jetzt von ihm ab (21 Widgets): Ohne dieses Modul, oder wenn es deaktiviert ist, wird das Widget nicht mehr angezeigt und der Live-Editor bietet es nicht mehr an; „Hinzufügen“ lehnt ein Widget-Archiv ohne sein Modul ab.
- Die Produktdokumentation wird nicht mehr mitgeliefert im Wiki einer neuen Website, das leer ankommt; sie lebt auf der Website des Projekts. Eine neue Installation erhält nicht mehr die Einstellungen von Themes, die sie nicht hat.
Entfernt
- Die alten Adressen
ajax/talksder privaten Nachrichten und ihre alte Nachrichtenmeldung, die nur ins Audit-Protokoll schrieb, mit ihrer Verwaltungsseite „Nachrichtenmeldungen“: Eine Nachricht wird jetzt über die Moderation gemeldet.