66 votes

Recommandations pour les bibliothèques java captcha

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

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

  • JCaptcha - N'est plus maintenu, API brute
  • SimpleCaptcha - API beaucoup plus agréable, captchas de meilleure qualité, mais semble être réservé à Java6.
  • ReCaptcha - facile à utiliser, utilise un service web distant pour générer des captchas, mais ne permet pas de contrôler l'aspect et la convivialité de l'application.

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

0 votes

Alors que j'explorais d'autres librairies captcha, je suis tombé sur captcha.com/doc/java/captcha-pour-java.html Peut-être que cela peut aider certains !

0 votes

Il existe une belle implémentation de Captcha hors ligne ici : javalite.io/captcha . Vous avez juste besoin d'un cours : github.com/javalite/activeweb/blob/master/activeweb/src/main/

72voto

jchilders Points 116

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

En outre, SimpleCaptcha est désormais disponible pour Java 1.5 ou Java 6.

1 votes

Quelles sont les dépendances de SimpleCaptcha exactement ? J'utilise Tomcat 7 et j'obtiens un java.lang.VerifyError dès que j'ajoute un GimpyRenderer à mon captcha, ce qui est dommage parce que j'aime beaucoup mieux l'API de SimpleCaptcha que celle de Kaptcha.

2 votes

Votre solution fonctionne très bien, mais le dernier repo maven d'où je l'ai tiré ( repo.enonic.com/maven ) est en panne, pas d'autres emplacements... Je vais mettre un jar dans mon git, mais ce serait quand même bien de le giter dans maven.

0 votes

@jchilders J'ai besoin d'utiliser SimpleCaptcha comme bundle osgi. C'est pourquoi j'essaie de le construire en tant que projet maven. Pour cela, j'ai besoin de jhlabs, mais la version des sources que j'ai téléchargée à partir de jhlabs.com/ip/filtres/download.html n'est pas compatible. Pouvez-vous dire quelle version de jhlabs vous avez utilisée ?

26voto

Francis Points 4305

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 pour le vieux texte), avec une base de données presque illimitée.

Tous les autres captchas sont généralement limités par leur base de données, ou n'apportent rien de bon à 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

24 votes

OK, mais le bénéfice pour l'humanité n'était pas vraiment sur ma liste de priorités :) De plus, JCaptcha et SimpleCaptcha génèrent des captchas aléatoires, la taille de la base de données n'est donc pas un problème.

3 votes

Une dernière chose - beaucoup de captchas avec des fonds colorés / rotatifs / lignes / images, sont trop complexes pour la majorité des utilisateurs (ex, le fameux Cat Number utilisé par rapidshare). recaptcha, au contraire, est basé sur de vrais mots anglais donc c'est plus facile pour la plupart des gens. Vous ne voudrez pas appliquer un captcha que 90% des gens vous enverront le mail disant que "je ne peux pas passer le cpatcha)...

6 votes

Je remets en question l'affirmation selon laquelle les captchas aléatoires sont plus facilement attaqués que les captchas basés sur une base de données. En ce qui concerne le ReCaptcha, l'un de ses avantages est que ce qu'il met en face de l'humain est un mot sur lequel une implémentation OCR de qualité a déjà échoué.

20voto

Mike Points 1449

Que se passe-t-il lorsque ReCaptcha est en panne ou indisponible ? Votre service s'arrête-t-il tout simplement ? Arrêtez-vous simplement d'inscrire les gens lorsqu'il est en panne ? Autorisez-vous les utilisateurs à s'inscrire même si ReCaptcha ne fonctionne pas ? Si c'est le cas, quelles sont les implications en matière de sécurité ? Surtout si vous utilisez CAPTCHA pour autre chose que l'inscription, par exemple des formulaires de réinitialisation de mot de passe, des formulaires de connexion, ... qui ne seraient pas acceptables sans le composant CAPTCHA.

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

3 votes

Allez, vous pensez vraiment que votre service est plus stable que ReCaptcha, surtout quand google l'a accrédité ? Même Facebook utilise ReCaptcha, donc ne vous inquiétez pas, sauf si vous avez un service plus important que Facebook... Je pense toujours qu'il n'y a pas de système de captcha meilleur que ReCaptcha.

6 votes

Google a déjà été en panne à plusieurs reprises (pas seulement Gmail, mais aussi les recherches). Si vous avez votre propre service, qui n'est utilisé que par vous, vous pouvez dire sans crainte que lorsque votre captcha est en panne, c'est tout votre système qui est en panne. Je me demande ce que Facebook ferait en cas de panne - devrait-il rester à nu jusqu'à ce qu'il soit réparé ? Ont-ils un plan de secours ? La panne est-elle si importante pour eux ? Si vous fournissez des services plus importants que de regarder qui vous a piqué, ou si vous avez une exigence de SLA, alors la solution n'est pas aussi simple que de "simplement attendre".

0 votes

@Mike - un site web sensé n'utilisera les technologies CAPTCHA qu'avec parcimonie, et la perte de la fonctionnalité CAPTCHA n'aura qu'un impact sur un petit sous-ensemble de la fonctionnalité du sire.

11voto

Jon Stevens Points 1087

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

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

0 votes

Bonjour Jon Stevens, je ne sais pas pourquoi, je n'ai pas réussi à faire fonctionner Kaptcha sur google app engine. Salutations, Xuwei

0 votes

Est-ce que com.google.code.kaptcha:kaptcha:jar ? Nous avons ${basedir}/src/main/webapp/WEB-INF/lib/kaptcha-2.3.2.jar dans notre application mais je voudrais le remplacer par une version provenant de Maven Central. Mais la seule chose que je peux y trouver, c'est com.github.penggle:kaptcha version 2.3.3. Est-ce que c'est la même chose ?

0 votes

Bonne question, c'est un énorme échec de la conception de maven à mon avis. Les choses que vous téléchargez depuis Maven Central peuvent provenir de n'importe où, donc.... qui sait. Je suppose que la réponse est non. Je suis l'auteur original et le projet exporté de Google code est ici : github.com/lookfirst/kaptcha Je suis également tombé sur ce clone qui apporte quelques changements dont l'ajout d'un pom : github.com/axet/kaptcha

5voto

Tilman Hausherr Points 324

SimpleCaptcha est vraiment agréable et facile à utiliser.

Voici un exemple d'utilisation de SimpleCaptcha avec JSF 2.0 (la page d'accueil contient un exemple pour JSP).

Notez que je ne prends même pas la peine 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>

Profitez-en :-)

0 votes

Il y a peut-être une faille ici : que se passe-t-il si je ne demande l'image captcha qu'une seule fois, puis que je ne demande plus jamais l'image captcha, et que j'utilise toujours le texte de celle-ci ? Est-ce que simplecaptcha a quelque chose comme captcha.invalidate_currentimage ?

0 votes

Je ne comprends pas la question, que voulez-vous dire par "utilisez toujours le texte de l'image" ? L'image n'est pas mise en cache, à cause des en-têtes, donc le navigateur la redemande à chaque fois que la page JSF est affichée. sourceforge.net/tracker/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X