Android 在移动应用程序中使用验证码

Android 在移动应用程序中使用验证码,android,mobile,captcha,recaptcha,Android,Mobile,Captcha,Recaptcha,我正在寻找另一种验证码用于我们的移动应用程序。我们正在用iOS和Android编写一个移动应用程序。web应用程序已存在。在网页中,我们使用captcha来确保只有真正的客户在应用,并防止拒绝服务类型的攻击 因此,从移动应用程序,我们也需要照顾这些。有人遇到过同样的情况吗?是否建议在本机移动应用程序中使用captcha?必须使用防止自动通信的机制。不这样做意味着您将允许一种可以自动访问服务器的方式。尽管您可能认为它只能从移动应用程序中使用,但攻击者的代码可以在任何地方运行,并使您的系统停止 如果

我正在寻找另一种验证码用于我们的移动应用程序。我们正在用iOS和Android编写一个移动应用程序。web应用程序已存在。在网页中,我们使用captcha来确保只有真正的客户在应用,并防止拒绝服务类型的攻击


因此,从移动应用程序,我们也需要照顾这些。有人遇到过同样的情况吗?是否建议在本机移动应用程序中使用captcha?

必须使用防止自动通信的机制。不这样做意味着您将允许一种可以自动访问服务器的方式。尽管您可能认为它只能从移动应用程序中使用,但攻击者的代码可以在任何地方运行,并使您的系统停止

如果您担心CAPTCHA会给移动用户带来不便,请尝试google Recaptcha。通常是点击复选框,或者在谷歌无法根据复选框确定的情况下点击一些图片


有一个使用google recaptcha的android库

Android-Lib-reCAPTCHA

reCAPTCHA Android库提供了一种简单的方法,可以在您的Android应用程序中将a显示为
ImageView
,帮助您阻止机器人滥用它。图书馆把书包起来

快速启动 首先你必须这样做

安装

repositories {
    jcenter()
}

dependencies {
    compile 'android.lib.recaptcha:reCAPTCHA:+'
}
布局

要显示验证码图像,您需要添加一个可以显示的
图像

或者,您可以在运行时创建
android.lib.recaptcha.recaptcha
的实例:

ReCaptcha reCaptcha = new ReCaptcha(context);
如何显示验证码

在包含
android.lib.recaptcha.recaptcha
的activity/fragment/view中,您需要显示一个图像供用户响应:

ReCaptcha reCaptcha = (ReCaptcha)findViewById(R.id.recaptcha);
reCaptcha.showChallengeAsync("your-public-key", onShowChallengeListener);
showChallengeAsync
异步下载并显示图像。在UI线程中调用是安全的。如果此调用发生任何错误,将不会引发异常。所有错误将被视为显示图像失败

onShowChallengeListener
ReCaptcha.onShowChallengeListener
的一个实例,在尝试显示完成时调用该实例

此方法的同步版本是
showChallenge

如何验证用户输入

要验证用户输入,请将输入字符串传递到
ReCaptcha.verifyAnswerAsync
(或
ReCaptcha.verifyAnswer
):

verifyAnswerAsync
异步将用户输入字符串提交给reCAPTCHA服务器进行验证。在UI线程中调用是安全的。如果此调用发生任何错误,将不会引发异常。所有错误将被视为验证失败

onVerifyAnswerListener
ReCaptcha.onVerifyAnswerListener
的一个实例,在尝试验证用户输入完成时调用该实例

此方法的同步版本是
verifyAnwser

指定区域设置

您可以强制小部件以特定语言呈现。请参阅

示例应用程序
完整的示例应用程序位于。

我看不出CAPTCHA与“拒绝服务类型攻击”有什么关系。攻击者无需访问认证后页面即可实施DoS攻击。“所以从移动应用程序来看,我们也需要处理这些问题”——为什么?说出任何需要人们使用验证码的专业Android应用程序。我当然没有看到过谷歌、推特、Evernote、Stack Overflow、TripIt等。我相信这取决于web服务的架构。如果serives具有适当的身份验证机制(如誓言),则可能不需要它。但在本例中,服务架构不是这样的。请参阅。不要复制外部来源的完整文本;相反,用他们的话和想法来支持你自己。并且一定要对你找到文本的作者和网站给予适当的信任,包括直接链接。
ReCaptcha reCaptcha = (ReCaptcha)findViewById(R.id.recaptcha);
reCaptcha.showChallengeAsync("your-public-key", onShowChallengeListener);
reCaptcha.verifyAnswerAsync("your-private-key", "user-input", onVerifyAnswerListener);
reCaptcha.setLanguageCode("fr");