CAPTCHA

Die Kontoseiten eines Portals akzeptieren Einsendungen von jedem: Ein Skript kann Konten erstellen oder das Portal mit Passwort-Zurücksetzen und Bestätigungslinks zu den von ihm gewählten Adressen machen. Ein CAPTCHA bittet jeden Besucher, sich als Person zu beweisen, bevor das Formular verschickt wird. Power Portals Pro unterstützt Cloudflare Turnstile, Google reCAPTCHA (v2 und v3) und hCaptcha und ist ausgeschaltet, bis man eines konfiguriert hat.

Anmerkung

Der Server prüft die Herausforderung, nicht nur die Seite. Sobald ein Anbieter konfiguriert ist, lehnen die Authentifizierungsendpunkte und die servergenerierten Kontoseiten die Einreichung eines geschützten Formulars ohne gelöste Herausforderung ab, egal was der Browser sendet.

Welche Formulare sind geschützt

CaptchaOptions.Forms wählt die Formulare als Kombination von CaptchaForms Werten aus. Der Standard schützt die Formulare, die ein automatisierter Anrufer missbrauchen kann, ohne ein Passwort zu kennen.

CaptchaForms Form Standardmäßig
Register Ein lokales Konto erstellen. On
ForgotPassword Ich frage nach einem Link zum Passwort-Zurücksetzen. On
ResendEmailConfirmation Ich bitte um einen weiteren Link zur Bestätigung per E-Mail. On
Login Sich mit E-Mail-Adresse und Passwort anmelden. Schalte es ein, um das Passwortraten zu verlangsamen; wiederholte falsche Passwörter sperren das Konto auch für eine Weile. Off
ExternalLogin Ein Anmelden über Microsoft, Google oder einen anderen Anbieter mit einer E-Mail-Adresse, die der Anbieter nicht überprüft hat, und an die das Portal dann eine Bestätigung schickt. Ein Anmeldeformular, dessen Adresse der Anbieter verifiziert hat, wird ohne Herausforderung abgeschlossen. Off

Wahl eines Anbieters

Die drei Anbieter funktionieren beim Portal ähnlich; sie unterscheiden sich darin, was der Besucher sieht und wessen Konto du brauchst. Jeder hat eine kostenlose Stufe.

Anbieter Das Konto, das Sie brauchen Was der Besucher sieht Links
Cloudflare-Drehkreuz Ein kostenloses Cloudflare-Konto. Ihr Portal muss nicht auf Cloudflare gehostet werden oder dessen DNS verwenden. Meistens gibt es nichts zu tun: Der Scheck läuft von selbst ab und verlangt nur gelegentlich einen Klick. Dashboard · Dokumentation
Google reCAPTCHA v2 Ein Google-Konto. Das Kästchen "Ich bin kein Roboter", manchmal gefolgt von einem Bildpuzzle. Admin-Konsole · Dokumentation
hCaptcha Ein kostenloses hCaptcha-Konto. Ein Häkchenkästchen, manchmal gefolgt von einem Bildrätsel. Dashboard · Dokumentation
Google reCAPTCHA v3 Ein Google-Konto. Gar nichts: Google bewertet jede Einsendung, und Googles Abzeichen sitzt in der Ecke der Seite. Ein zu niedrig bewerteter Besucher wird abgelehnt und kann das Gegenteil nicht beweisen. Admin-Konsole · Dokumentation

Egal, wofür du dich entscheidest, der Anbieter gibt dir zwei Schlüssel für deine Seite: einen Site-Schlüssel, der öffentlich ist und an jeden Browser gesendet wird, um das Widget zu zeichnen, und einen geheimen Schlüssel, den nur der Server verwendet, um die Antwort eines Besuchers zu überprüfen. Halte den geheimen Schlüssel außerhalb der Quellcode.

Aufbau des Cloudflare-Drehkreuzes

  1. Melde dich bei dash.cloudflare.com für ein kostenloses Konto an. Du musst keine Website hinzufügen oder DNS verschieben.
  2. Öffne Turnstile im Menü des Dashboards und wähle Widget hinzufügen.
  3. Benennen Sie das Widget und fügen Sie jeden Hostnamen hinzu, von dem aus das Portal bereitgestellt wird – seine Produktionsdomäne, eventuelle Deployment-Slots und localhost wenn Sie mit echten Schlüsseln testen.
  4. Wähle den Managed Widget-Modus , der nur nach einem Klick fragt, wenn Cloudflare unsicher ist.
  5. Erstelle das Widget und kopiere seinen Site-Schlüssel und den Geheimschlüssel.

Einrichtung von Google reCAPTCHA v2

  1. Melde dich mit einem Google-Konto in der reCAPTCHA-Admin-Konsole an und erstelle eine neue Seite.
  2. Wähle Herausforderung (v2) und dann das Kästchen "Ich bin kein Roboter".
  3. Füge jede Domain hinzu, von der das Portal bereitgestellt wird, und localhost wenn du mit echten Schlüsseln testest,
  4. Lassen Sie Verify the origin of reCAPTCHA-Lösungen an, damit ein auf einer anderen Seite gelöstes Token abgelehnt wird. Senden Sie ein und kopieren Sie den Site-Schlüssel und den geheimen Schlüssel.

Wichtig

Nutzen Sie Anbieter ReCaptchaV2 und den Captcha:ReCaptchaV2 Abschnitt nur für einen v2-Kästchen-Kästchen-Schlüssel "Ich bin kein Roboter" – das Widget zeigt für alle anderen "Ungültiger Schlüsseltyp" an. Ein v3-Schlüssel kommt unter ReCaptchaV3, unten; das unsichtbare v2-Abzeichen wird nicht unterstützt. Google könnte Sie bitten, den Schlüssel einem Google-Cloud-Projekt anzuhängen; das ändert nichts daran, wie das Portal ihn verwendet.

Einrichtung von Google reCAPTCHA v3

v3 zeigt keine Herausforderung. Die Seite fragt Google nach einem Token, wenn das Formular eingereicht wird, das mit dem Formular versehen ist, und der Server lehnt ein unten MinimumScore bewertetes oder für ein anderes Formular getaggtes Token ab. Nutzen Sie Provider ReCaptchaV3 und seinen eigenen Abschnitt: Captcha:ReCaptchaV3Ein v3-Schlüssel ist ein anderer Schlüssel als ein v2-Schlüssel.

  1. In der reCAPTCHA-Admin-Konsole erstellen Sie eine neue Seite und wählen Sie Score-basiert (v3).
  2. Füge jede Domain hinzu, von der das Portal bereitgestellt wird, und localhost wenn du mit echten Schlüsseln testest, lass den Ursprung der reCAPTCHA-Lösungen überprüfen aktiviert.
  3. Senden Sie ein und kopieren Sie den Site-Schlüssel sowie den geheimen Schlüssel in Captcha:ReCaptchaV3.
  4. Setze MinimumScore, von 0,0 auf 1,0. Standardmäßig steht 0,5, Googles empfohlener Startpunkt; die Admin-Konsole zeigt die Punktzahlen an, die deine Besucher erzielen, um sie abzustimmen.

Wichtig

Ein Besucher, der unten MinimumScore bewertet wird, wird abgelehnt, ohne etwas zu lösen, und soll es gleich erneut versuchen. Erhöhe es vorsichtig und schau dir danach die Ergebnisse in der Admin-Konsole an. Google veröffentlicht keine Testschlüssel für v3.

Aufbau von hCaptcha

  1. Melden Sie sich bei dashboard.hcaptcha.com für ein kostenloses Konto an.
  2. Unter Sites fügen Sie eine neue Seite hinzu und kopieren Sie deren Site-Schlüssel.
  3. In den Einstellungen der Seite fügen Sie jeden Hostnamen hinzu, von dem das Portal bereitgestellt wird. hCaptcha akzeptiert localhost kein oder127.0.0.1: um echte Schlüssel auf Ihrem Rechner zu testen, fügen Sie einen Namen wie 127.0.0.1 dev.example.com in Ihre Hosts-Datei ein und fügen Sie diesen hinzu, oder verwenden Sie die untenstehenden Testschlüssel.
  4. Kopiere den Geheimschlüssel aus deinen Kontoeinstellungen (oder aus dem eigenen Geheimnis der Seite, wo das Dashboard einen anbietet).

Testschlüssel für lokale Entwicklung

Jeder Anbieter veröffentlicht ein Paar Testschlüssel, die auf jedem Hostnamen funktionieren, localhost eingeschlossen, und immer bestehen – so können Sie die Formulare des Portals ausprobieren, bevor Sie ein Konto erstellen. Das Widget zeigt an, dass es sich im Testmodus befindet.

Anbieter Standortschlüssel Geheimer Schlüssel
Turnstile 1x00000000000000000000AA 1x0000000000000000000000000000000AA
ReCaptchaV2 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe
HCaptcha 10000000-ffff-ffff-ffff-000000000001 0x0000000000000000000000000000000000000000

Wichtig

Testschlüssel akzeptieren jeden Besucher, einschließlich Robotern. Setze sie niemals ein: Ersetze sie durch deine eigenen Schlüssel, bevor das Portal live geht.

Konfiguration des Portals

Projekte, die aus den Vorlagen generiert werden, binden CaptchaOptions sich an den Captcha Abschnitt von appsettings.json, der mit Provider Setzen auf Nonebeginnt. Jeder Anbieter hat einen eigenen Abschnitt für seine Schlüssel — Turnstile, , ReCaptchaV2, ReCaptchaV3 und HCaptcha — und Provider wählt aus, welcher verwendet wird, sodass Sie mehrere konfiguriert halten und mit einer Einstellung zwischen ihnen wechseln können. Fügen Sie den Standortschlüssel jedes Anbieters in seinen Abschnitt ein. Forms nimmt die Formnamen an, getrennt durch Kommas; lassen Sie ihn weg, um den Standard beizubehalten.

Bewahren Sie die geheimen Schlüssel während der Entwicklung in Benutzergeheimnissen auf und in Key Vault oder den Einstellungen des App Services bei der Bereitstellung – niemals in appsettings.json. In Key Vault benennen Sie sie Captcha--Turnstile--SecretKey und so weiter:

Dies ist die Zeile in Program.cs , die den Abschnitt liest. Ein Portal, das nicht aus einer Vorlage generiert wurde, fügt sie nach AddPowerPortalsProWebServer()hinzu:

Oder setze die Optionen im Code, wie bei jeder anderen IOptions Klasse:

Tipp

Ein Anbieter ohne beide Schlüssel stoppt das Portal beim Start mit einer Nachricht, in der steht, was fehlt, anstatt mit Formularen zu beginnen, die jeden Besucher ablehnen würden.

Die Herausforderung zu deinen eigenen Formen hinzufügen

Die Kontoseiten der Vorlage enthalten sie bereits. Auf ein eigenes Formular platzieren Sie die Captcha Komponente – sie rendert nichts, es sei denn, das von Ihnen benannte Formular erfordert eine Herausforderung — und senden Sie das Token, das es beim Einreichen des Formulars übergibt: TakeTokenAsync() in Blazor, takeToken() auf die Referenz in React. Eine Einreichung, die der Server für die Herausforderung ablehnt, CaptchaVerificationException stellt in Blazor und CaptchaVerificationError in React hervor.

React Blazor

Ein Token ist gut für eine Einreichung, daher setzt das Entgegennehmen auch die Herausforderung zurück: Unabhängig vom Ergebnis – ein falsches Passwort, eine bereits verwendete Adresse – bekommt der nächste Versuch eine neue, ohne dass die Seite etwas tut. Unter reCAPTCHA v3 gibt es kein Token, bis es aufgenommen ist, also halte keinen Absenden-Button zurück, bis TokenChanged (Blazor) oder onTokenChange (React) einen meldet.

Eine server-gerenderte Blazor-Seite, die sich selbst aufruft UserManager , IAuthServiceüberprüft statt durch , das Token mit ICaptchaVerifier und handelt:

Begrenzung von Versuchen pro Adresse

Unabhängig davon, ob ein CAPTCHA konfiguriert ist oder nicht, begrenzt das Portal, wie oft eine Adresse jedes Formular einreicht, das jemand ohne Anmeldung einreichen kann – Anmeldung, Registrierung, Passwort zurücksetzen, Bestätigung erneut senden, Einladung annehmen. Standardmäßig kann eine Adresse alle 20 Mal pro Minute eingereicht werden; danach wird sie beantwortet mit 429 Too Many Requests bis zum Ablauf der Minute. Jedes Formular wird für sich gezählt. Ändern Sie das Limit unter PowerPortalsPro:SignInRateLimit; a PermitLimit von 0 schaltet es aus.

Wichtig

Das Limit zählt die Adresse, von der eine Anfrage stammt. Hinter einem Proxy oder Gateway, der die Adresse des Besuchers nicht weitergibt – Azure Front Door, Application Gateway, ein eigener Load Balancer – kommt jeder Besucher von den Proxys an, und sie teilen sich eine Zählung. Leite die Adresse des Besuchers mit UseForwardedHeadersweiter und benennen Sie den Proxy in KnownProxies oder KnownNetworks.

Inhaltssicherheitsrichtlinie

Das Widget wird von der Website des Anbieters geladen. Wenn dein Portal einen Content-Security-Policy Header sendet, erlaube den Hosts des Anbieters und script-src frame-src (hCaptcha benötigt style-src auch und connect-src):

Anbieter Moderatoren
Turnstile https://challenges.cloudflare.com
ReCaptchaV2 https://www.google.com/recaptcha/, https://www.gstatic.com/recaptcha/
HCaptcha https://hcaptcha.com, https://*.hcaptcha.com

Fehlerbehebung