web-dev-qa-db-fra.com

Recommandations pour Java bibliothèques captcha

Je cherche un remplaçant pour JCaptcha, qui ne semble plus être entretenu et qui n'est pas très bon pour commencer. Le remplacement doit s'intégrer parfaitement aux applications Web JavaEE.

Comme je peux le voir, il y a trois options:

  • JCaptcha - n'est plus maintenue, API brute
  • SimpleCaptcha - API beaucoup plus agréable, captchas plus agréables, mais semble être Java6 uniquement
  • ReCaptcha - facile à utiliser, utilise un service Web à distance pour générer des captchas, mais pas beaucoup de contrôle sur l'apparence

Quelqu'un en a-t-il utilisé d'autres qu'il recommanderait?

61
skaffman

ReCaptcha est le seul captcha que vous devriez utiliser, car c'est le seul captcha qui rend le monde meilleur (améliore les résultats de l'OCR avec l'ancien texte), avec une base de données presque illimitée.

Tous les autres captchas sont généralement limités par sa base de données, ou ne font rien de bon pour ce monde.

EDIT :: J'ai trouvé des étapes pour implémenter captcha en utilisant recaptcha.

Vous pouvez vérifier le captcha en ligne et hors ligne en utilisant Java ici

25
Francis

Je suis l'auteur de SimpleCaptcha . Bien que je recommande - pour le bien de l'humanité - d'utiliser ReCaptcha là où vous le pouvez, j'ai fourni SimpleCaptcha parce que certaines organisations ont des politiques qui interdisent les bibliothèques comme ReCaptcha. SimpleCaptcha est censé être entièrement autonome, sans dépendances externes: tant que vous êtes dans un conteneur J2EE, vous devriez être bon.

De plus, SimpleCaptcha est désormais disponible pour Java 1.5 ou Java 6.

71
jchilders

Que se passe-t-il lorsque ReCaptcha est arrêté/indisponible? Votre service s'arrête-t-il simplement? Arrêtez-vous simplement d'inscrire des gens quand il est en panne? Autorisez-vous les utilisateurs à s'inscrire même si ReCaptcha n'est pas en cours d'exécution? Si oui, quelles en sont les implications pour la sécurité? Surtout si vous utilisez CAPTCHA pour plus que la simple inscription, par exemple réinitialiser les formulaires de mot de passe, les formulaires de connexion, ... qui ne seraient pas acceptables sans le composant CAPTCHA.

Le Java monde de CAPTCHAs est dans un triste état, avec SimpleCaptcha apparemment la meilleure solution pour ceux d'entre nous qui ne peuvent pas accepter un service hébergé.

19
Mike

J'ai créé http://kaptcha.googlecode.com avant que recaptcha ne devienne aussi populaire qu'aujourd'hui. Il vous offre également la possibilité de l'héberger vous-même, ce qui peut être nécessaire dans certaines situations.

Kaptcha est une version fortement modifiée et mise à jour de SimpleCaptcha et prend en charge JDK5/6.

10
Jon Stevens

SimpleCaptcha est vraiment agréable et facile à utiliser.

Voici un exemple comment utiliser SimpleCaptcha avec JSF 2.0 (la page d'accueil a un exemple pour JSP)

Notez que je ne me soucie même pas de stocker la valeur captcha dans le bean, je ne fais que la valider.

Le haricot:

// 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"));
    }
}

Le segment pertinent de la facette:

        <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>

Le segment pertinent du 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>

Prendre plaisir :-)

5
Tilman Hausherr

Kaptcha est une alternative intéressante à Recaptcha si vous cherchez à héberger votre propre service de captcha au lieu de compter sur un service de captcha tiers (comme recaptcha).

3
Sasi