web-dev-qa-db-ja.com

Java captchaライブラリの推奨事項

JCaptchaの代替品を探しています。JCaptchaはもはやメンテナンスされていないようで、最初はあまり良くありません。置き換えは、JavaEE webappsとうまく統合する必要があります。

ご覧のとおり、3つのオプションがあります。

  • JCaptcha-メンテナンスされなくなった、粗雑なAPI
  • SimpleCaptcha-より良いAPI、より良いcaptchas、しかしJava6のみのようです
  • ReCaptcha-使いやすく、リモートWebサービスを使用してキャプチャを生成しますが、ルックアンドフィールをあまり制御しません

誰かが他の人を使ったことがありますか?

61
skaffman

ReCaptcha は、使用する必要がある唯一のキャプチャです。これは、ほとんど無制限のデータベースで、世界をより良くする(OCR結果を古いテキストに改善する)唯一のキャプチャであるためです。

他のすべてのキャプチャは、通常、そのデータベースによって制限されているか、この世界には何の役にも立ちません。

EDIT :: recaptchaを使用してcaptchaを実装する手順を見つけました。

Java here を使用して、オンラインとオフラインの両方のキャプチャを確認できます。

25
Francis

私は SimpleCaptcha の著者です。人類のためにできる限りReCaptchaを使用することをお勧めしますが、一部の組織にはReCaptchaなどのライブラリを禁止するポリシーがあるため、SimpleCaptchaを提供しました。 SimpleCaptchaは、完全にスタンドアロンであり、外部依存関係がないことを意図しています。J2EEコンテナ内にいる限り、うまくいくはずです。

また、SimpleCaptchaはJava 1.5またはJava 6。

71
jchilders

ReCaptchaがダウン/使用不可になるとどうなりますか?サービスは単純に停止しますか?ダウンしているときに単にサインアップを停止しますか? ReCaptchaが実行されていなくても、ユーザーがサインアップできるようにしますか?もしそうなら、これのセキュリティへの影響は何ですか?特に、CAPTCHAを単なるサインアップ以上に使用している場合、パスワードフォーム、ログインフォームなどをリセットします。これらは、CAPTCHAコンポーネントなしでは使用できません。

Java CAPTCHAの世界は悲しい状態にあります。SimpleCaptchaは、ホストされたサービスを受け入れられない私たちにとって最良のソリューションのようです。

19
Mike

Recaptchaが今日ほど人気になる前に http://kaptcha.googlecode.com を作成しました。また、それを自分でホストする機能も提供しますが、これは状況によっては必要になる場合があります。

Kaptchaは、SimpleCaptchaの大幅に変更および更新されたバージョンであり、JDK5/6をサポートしています。

10
Jon Stevens

SimpleCaptchaは本当にすてきで使いやすいです。

次に、JSF 2.0でSimpleCaptchaを使用する方法の例を示します(ホームページにはJSPの例があります)

Beanにcaptcha値を保存することすら気にかけていないことに注意してください。検証するだけです。

豆:

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

Faceletの関連セグメント:

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

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>

楽しい :-)

5
Tilman Hausherr

Kaptchaは、サードパーティのキャプチャサービス(recaptchaなど)に依存するのではなく、独自のキャプチャサービスをホストする場合、Recaptchaに代わるニースです。

3
Sasi