【问题标题】:How could we integrate the Captcha in iOS application?我们如何将验证码集成到 iOS 应用程序中?
【发布时间】:2014-01-25 04:10:51
【问题描述】:

我在 iOS 应用程序中搜索了 Captcha 的集成,但没有找到任何相关的方法。即使我注册reCAPTCHA 并搜索验证码插件是否适用于 iOS?我在那里没有找到任何适用于 iOS 的插件。虽然 RND 我开始知道“移动应用程序不需要它”,但客户希望在他的应用程序中使用验证码,所以我想知道:-

  • 我们是否可以在 iOS 应用/移动应用中集成验证码:-

    1. 如果是? : 那么整合它的相关方法是什么。

    2. 如果不是? : 那么相关的原因是什么。

【问题讨论】:

  • 向客户解释为什么它不适用于移动应用...
  • @Wain : 现在我只能这样做了 :)
  • 创建一个爬取网络(包括网络应用程序)和提交表单的机器人相对简单。这就是经典验证码解决方案的用武之地。我们不需要在本机应用程序中制作验证码。为什么我们需要验证码来避免垃圾邮件,不幸的是,我听说没有机器人会向本机应用程序发送垃圾邮件。
  • @SaadChaudhry 赞赏 (y) :)
  • 我是一名渗透测试员,拥有 8 年为大型国际公司的主要项目工作的经验。我还为它们开发了大型网络和移动应用程序以及后端服务。我在这里告诉大家,“移动应用不需要验证码”的谣言必须停止!客户端应用程序,无论是浏览器中的 HTML/JS 还是 Android 上的 APK,都与 HTTP 服务交互,并且易受攻击的是 HTTP 服务本身,而不是与它们交互的客户端应用程序!由于这个谣言,我个人在主要方面损害了许多 API

标签: ios iphone ipad captcha recaptcha


【解决方案1】:

虽然我们在 iOS 中没有任何用于 Captcha 的 API,但即使是 reCaptcha 也没有为 iOS 提供任何 插件。甚至很多人建议我没有必要为移动应用程序实施验证码。我同意了,但由于客户无法听取任何借口,我所做的是,

  1. 我只是使用

    创建了随机数

    -(NSInteger)randomIntBetween:(NSInteger)min and:(NSInteger)max { return (NSInteger)(min + arc4random_uniform(max + 1 - min)); }

    将该数字放在标签上并要求用户在提供的文本字段中输入相同的数字,如果找到匹配项,则验证码的主体已完成[另一端的用户是人类是唯一集成验证码的主体],否则,我会重新生成随机数并将其再次放置在标签上,要求用户在提供的文本字段中输入相同的数字。
    最终结果将是这样的。

现在你的想法可能更清楚了,只需将函数 "randomIntBetween" 的输出分配给显示数字的标签,并在用户按下登录按钮时进行身份验证textField(Named: Enter number) 中的文本是否与其左侧的标签匹配,如果匹配则允许用户登录,如果不匹配则清除文本字段的文本以及标签上的文本,然后分配新的随机数通过调用方法 "randomIntBetween:" 到左侧的标签,并要求用户在输入数字文本字段中输入文本。

【讨论】:

  • 这不是验证码。它看起来像一个验证码,但没有提供任何保护。
  • 这是没用的,如果有人嘲笑你的网络服务
【解决方案2】:

虽然不需要在某些应用程序中添加验证码,因为应用程序不像 Web,所以,根据我的想法,不需要在某些应用程序中附加验证码来防止机器人,如果你需要嵌入它... 是的,这是可能的方法,请检查以下代码:

采取这些出口和变量:

NSArray *arrCapElements;
IBOutlet UILabel *Captcha_label;
IBOutlet UITextField *Captcha_field;
IBOutlet UILabel *Status_label;

IBActions 为:

- (IBAction)Reload_Action:(id)sender;
- (IBAction)Submit_Action:(id)sender;

在情节提要中,为 Captcha_label 选择字体名称为 Chalkduster 30.0

现在将arrCapElements 中的viewDidLoad() 分配为

arrCapElements = [[NSArray alloc]initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"n",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z",@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z", nil];

验证码加载代码:

-(void)load_captcha{
    @try {
        CGFloat hue = ( arc4random() % 256 / 256.0 );  //  0.0 to 1.0
        CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from white
        CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from black
        Captcha_label.backgroundColor = [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
        //Captcha_label.textColor=[UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
        NSUInteger elmt1,elmt2,elmt3,elmt4,elmt5,elmt6;
        elmt1 = arc4random() % [arrCapElements count];
        elmt2= arc4random() % [arrCapElements count];
        elmt3 = arc4random() % [arrCapElements count];
        elmt4 = arc4random() % [arrCapElements count];
        elmt5 = arc4random() % [arrCapElements count];
        elmt6 = arc4random() % [arrCapElements count];

        NSString *Captcha_string = [NSString stringWithFormat:@"%@%@%@%@%@%@",arrCapElements[elmt1-1],arrCapElements[elmt2-1],arrCapElements[elmt3-1],arrCapElements[elmt4-1],arrCapElements[elmt5-1],arrCapElements[elmt6-1]];
        //NSLog(@" Captcha String : %@",Captcha_string);
        Captcha_label.text = Captcha_string;
    }
    @catch (NSException *exception) {
        NSLog(@"%@",exception);
    }
}

重新加载操作:

- (IBAction)Reload_Action:(id)sender {

    [self load_captcha];
}

检查验证码是否正确:

- (IBAction)Submit_Action:(id)sender {

    NSLog(@"%@ = %@",Captcha_label.text,Captcha_field.text);
    if([Captcha_label.text isEqualToString: Captcha_field.text]){
        [self.view endEditing:YES];
        Status_label.text =@"Success";
        Status_label.textColor = [UIColor greenColor];
    }else{
        Status_label.text =@"Faild";
        Status_label.textColor = [UIColor redColor];
    }
}

会这样显示:

帮助来自:Captcha Generator for iOS

【讨论】:

  • 这不是验证码。它看起来像一个验证码,但没有提供任何保护。
  • reCAPTCHA 应该在服务器上验证,我在你的回答中看不到它
【解决方案3】:

我使用以下库:

https://github.com/fjcaetano/ReCaptcha

它将使用隐藏的 webview 来处理它

【讨论】:

  • 我不太确定这个隐藏的 webview ReCaptcha 解决方案,为了让 recaptcha 工作,它需要跟踪用户的行为,使用这个解决方案我看不出这是怎么发生的,所以我假设挑战会出现 99.99% 的时间
  • @Waqleh ReCapatcha 的想法是保护您的服务器免受垃圾邮件或不规则点击的影响。因此,即使您将它与隐藏的 WV 一起使用,它也不会对普通用户/设备显示太多。 BTW:我试了一下,90%的点击都没有出现。
  • 很高兴知道它并不总是显示挑战,我没有尝试过这个库,我知道 recaptcha 用于阻止垃圾邮件和 ddos​​ 攻击......无论如何,即使它显示 100% 的时间总比没有好。更好的解决方案是使用 SMS 验证,例如 telegram 和 whatsapp..etc 所做的
  • 在我看来,短信验证还不够,有时黑客可以使用“在线假号码”进行验证并模拟相同的查询来攻击您或访问您的数据,使用令牌或您之后提供的任何东西短信验证,,,祝兄弟好运。
  • 攻击总是有办法的,有心就有办法,可以检测到假号码,gmail、facebook等已经可以非常有效地做到这一点,短信验证是一个行业标准,这并不意味着它是万无一失的,什么都不是,您应该始终尝试在用户体验和安全性之间取得平衡,否则您肯定会失去转换。
猜你喜欢
  • 2017-06-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2018-09-07
  • 1970-01-01
  • 2018-12-09
相关资源
最近更新 更多