Natürliche Auslese ist der Feind des Bots

    Ein interessanter Bug wurde gerade entdeckt. Ich sage es dir.

    Wir haben einen Service mit Captcha. Um die Reaktionszeit zu verkürzen, ist es logisch, Bilder in der Freizeit zur Stunde der kleinsten Last per Zufallscode zu generieren. Also setzen wir die Aufgabe in die Kronen, machen 100500 Captchas (Bild + Code in der Datenbank) und zeigen sie tagsüber. Wenn die regenerierten Captchas immer noch aufgebraucht sind, führen Sie einen Notflugmodus durch. Wenn Sie die Anzahl der Captchas erraten und daher aus dem Basis-Captcha entfernen, wird die Gesamtzahl der Captchas auf ein gefährliches Niveau gesenkt (zum Beispiel bleiben weniger als 50). Dann generieren wir ein neues Captcha anstelle des entfernten .

    Es scheint ein einfaches und funktionierendes Schema zu sein. So war es bis vor kurzem.

    Beschwerden tobten, dass das Captcha nicht gelöst werden konnte. Beschwerden kamen ausschließlich annach 19:00, wenn alle Entwickler die IDE bereits schließen und DotA starten. Vorausgesetzt, die zufällige Erzeugung von Captchas wurde am Ende des Tages korrekt implementiert (zuerst überprüft), endeten alle (nun gut oder fast alle) Captchas mit D.

    Es stellte sich heraus, dass Folgendes passiert: Das Ende der Captchas. Da wir jedoch kein angezeigtes, aber nicht aufgelöstes Captcha aus der Datenbank entfernen, beginnt die natürliche Selektion des regenerierten Captcha, und am Ende des Tages haben wir die 50 bösesten und komplexesten Captcha der Welt. Die weitere Entwicklung der Situation, in der anstelle des gelösten Captcha ein zufälliges hinzugefügt wird, verbessert die Angelegenheit nicht wesentlich. Dabei haben wir festgestellt, dass der potenziell ungelöste Buchstabe in Captcha D ist, da ein Drittel der Benutzer ihn bei ausreichender Verzerrung als D, ein Drittel als 0 (Null) und ein Drittel als O interpretiert. Weitere 46% werden auf Russisch eingegeben.

    Hier ist es, natürliche Auslese in Aktion!

    Jetzt auch beliebt: