web-dev-qa-db-ger.com

Empfehlungen für Java Captcha-Bibliotheken

Ich suche nach einem Ersatz für JCaptcha, der anscheinend nicht mehr gewartet wird und anfangs nicht sehr gut ist. Der Ersatz muss sich gut in JavaEE-Webanwendungen integrieren lassen.

Wie ich sehe, gibt es drei Möglichkeiten:

  • JCaptcha - Nicht mehr gepflegte, rohe API
  • SimpleCaptcha - viel schönere API, schönere Captchas, scheint aber nur Java6 zu sein
  • ReCaptcha - einfach zu bedienen, verwendet Remote-Webdienst, um Captchas zu generieren, aber nicht viel Kontrolle über das Erscheinungsbild

Hat jemand andere benutzt, die er empfehlen würde?

61
skaffman

ReCaptcha ist das einzige Captcha, das Sie verwenden sollten, da es das einzige Captcha ist, das die Welt verbessert (Verbesserung der OCR-Ergebnisse gegenüber altem Text), mit nahezu unbegrenzter Datenbank.

Alle anderen Captchas sind normalerweise durch ihre Datenbank begrenzt oder tun dieser Welt nichts Gutes.

EDIT :: Ich habe Schritte gefunden, um Captcha mit recaptcha zu implementieren.

Sie können sowohl Online- als auch Offline-Captcha mit Java hier prüfen

25
Francis

Ich bin der Autor von SimpleCaptcha . Ich würde zwar - der Menschheit halber - empfehlen, ReCaptcha zu verwenden, sofern dies möglich ist, aber ich habe SimpleCaptcha bereitgestellt, da einige Organisationen Richtlinien haben, die Bibliotheken wie ReCaptcha verbieten. SimpleCaptcha soll völlig eigenständig und ohne externe Abhängigkeiten sein: Solange Sie sich in einem J2EE-Container befinden, sollten Sie gut sein.

SimpleCaptcha ist jetzt auch für Java 1.5 oder Java 6 verfügbar.

71
jchilders

Was passiert, wenn ReCaptcha nicht verfügbar ist? Beendet Ihr Dienst einfach? Hören Sie einfach auf, Leute anzumelden, wenn es nicht funktioniert? Können sich Benutzer auch dann anmelden, wenn ReCaptcha nicht ausgeführt wird? Wenn ja, welche Auswirkungen hat dies auf die Sicherheit? Insbesondere, wenn Sie CAPTCHA nicht nur für die Anmeldung verwenden, z. Zurücksetzen von Passwortformularen, Anmeldeformularen, ..., die ohne die CAPTCHA-Komponente nicht verwendet werden können.

Die Java Welt der CAPTCHAs befindet sich in einem traurigen Zustand, und SimpleCaptcha scheint die beste Lösung für diejenigen von uns zu sein, die keinen gehosteten Service akzeptieren können.

19
Mike

Ich habe http://kaptcha.googlecode.com erstellt, bevor recaptcha so populär wurde, wie es heute ist. Es bietet Ihnen auch die Möglichkeit, es selbst zu hosten, was in manchen Situationen erforderlich sein kann.

Kaptcha ist eine stark modifizierte und aktualisierte Version von SimpleCaptcha und unterstützt JDK5/6.

10
Jon Stevens

SimpleCaptcha ist wirklich nett und einfach zu bedienen.

Hier ist ein Beispiel für die Verwendung von SimpleCaptcha mit JSF 2.0 (die Homepage enthält ein Beispiel für JSP)

Beachten Sie, dass ich mich nicht einmal die Mühe mache, den Captcha-Wert in der Bean zu speichern, sondern ihn nur validiere.

Die Bohne:

// imports missing here

@ManagedBean
@SessionScoped
public class LoginBean implements Serializable
{
    public void validateCaptcha(FacesContext context,
            UIComponent componentToValidate,
            Object value)
            throws ValidatorException
    {
        HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
        Captcha secretcaptcha = (Captcha) session.getAttribute(Captcha.NAME);
        if (secretcaptcha.isCorrect(value.toString()))
            return;

        // optional: clear field
        ((HtmlInputText) componentToValidate).setSubmittedValue("");

        throw new ValidatorException(new FacesMessage("Captcha does not match"));
    }
}

Das relevante Segment der Facelette:

        <h:form id="CaptchaForm">
            Type this: <br/>
            <h:graphicImage id="CaptchaImgID" value="/simpleCaptcha.png"/> <br/>
            <h:inputText id="CaptchaID"
                         required="true"
                         requiredMessage="Captcha missing"
                         validator="#{loginBean.validateCaptcha}"
                         validatorMessage="Captcha does not match"
                         immediate="true">
            </h:inputText>
            <br/>
            <h:commandButton value="Check"/>

            <p/>
            <!-- message for the input field -->
            <h:message id="CaptchaMsgID" for="CaptchaID" style="color:red" />
        </h:form>

Das relevante Segment der web.xml:

<servlet>
    <servlet-name>SimpleCaptcha</servlet-name>
    <servlet-class>nl.captcha.servlet.SimpleCaptchaServlet</servlet-class>
<init-param>
    <param-name>captcha-width</param-name>
    <param-value>250</param-value>
</init-param>
<init-param>
    <param-name>captcha-height</param-name>
    <param-value>75</param-value>
</init-param>
</servlet>
<servlet-mapping>
    <servlet-name>SimpleCaptcha</servlet-name>
    <url-pattern>/simpleCaptcha.png</url-pattern>
</servlet-mapping>

Genießen :-)

5
Tilman Hausherr

Kaptcha ist eine gute Alternative zu Recaptcha, wenn Sie Ihren eigenen Captcha-Service hosten möchten, anstatt sich auf einen Captcha-Service eines Drittanbieters zu verlassen (wie Recaptcha).

3
Sasi