0

我有一个应用程序,其中有一个登录屏幕。我想在我的应用程序中添加一个限制一次登录尝试的最大次数的功能。例如,如果用户尝试登录错误user name和/或password超过 5 次,则应弹出一条消息,提示您在接下来的 60 秒内无法登录。如果他在那 60 秒内尝试,那么他应该无法登录。60 秒后,他应该能够使用正确的密码进行操作。

4

5 回答 5

0

您可以使用 NSTimer 来强制执行时间限制。在一个简单的情况下,每次登录尝试不成功时都会增加一个计数器。在第 6 次尝试时,您将标志设置为 NO,并启动计时器。标志为“否”时的任何进一步尝试都将被拒绝。当计时器触发时,它会将标志启动为 YES,并且用户可以重试。

于 2013-05-16T15:21:43.150 回答
0

应该像创建实例变量 int 并在每次登录失败后递增它一样简单,如果它达到 5 则阻止登录尝试,同时触发 NSTimer 以在 60 秒后将计数擦除为 0。

于 2013-05-16T15:19:44.887 回答
0

保存上次尝试失败的时间和默认值中的尝试计数。

于 2013-05-16T15:19:55.777 回答
0

如果您的登录来自某项服务,则最好在那里进行处理。您放入 NSUserDefaults 的任何内容都可以被读取并可能被更改。

于 2013-05-16T17:21:59.837 回答
0

就像一个概念:

start a session for the login process if there is none;
setting up the timer in that session (startime) if not already set

loop by post to self:

    check login;

    on unsuccessfull login:

        counting unsuccessfull logins;
        if timer / counter are hit, instead of presenting the login fields, 
        show an error message;
        if time of no login is reached, show login fields again, reset counter;
        return;

    on successfull login:

        stop and drop the current session (to get rid of the timer stuff);
        start the real session;
        forward to application screen;

但是:这不会阻止任何人暴力破解您的应用程序,因为这一切都取决于会话 cookie。通常这些 bf 攻击不会返回任何 cookie,因此它们总是会在第一次尝试时开始一个新会话。费了很大力气,没有效果。依赖 IP 地址也无济于事,如果您被僵尸网络攻击,您将每秒收到来自各种 IP 的 100 多个请求。

我建议在登录窗口/屏幕中有类似CSRF Token 的东西

于 2013-05-16T15:34:35.647 回答