在错误的密码输入上锁定应用程序(c / c ++)

时间:2013-12-02 07:46:55

标签: c++ login

如果输入错误的密码3次,我想阻止用户(5分钟)访问特定的基于Windows的应用程序(C / C ++)。我是否需要在系统级别维护日志文件,或者是否有任何方法可以为计时器检查维护一些参数(例如在Cookies中)?

1 个答案:

答案 0 :(得分:2)

正如Jonathan在评论中所说,如果代码(应用程序)仅在本地运行,那么任何方案通常都很容易被绕过。如果至少有一些组件在受到合理保护的服务器上运行,那么您有更好的机会。

对于“仅限本地方案”,最简单的方法是:

int count = 0;
for(;;)
{ 
    ask_password();
    if (password == expected_password)
        break;
    count++;
    if (count == 3)
    {
       Sleep(300000);    // 5 minutes = 300000 ms. 
       count = 0;
    }  
}

当然,这只需要用户关闭应用程序并再次启动它以绕过超时。为了避免“帮助”,您必须将“计数”存储在某种外部存储中(注册表键可能是最简单的),以及上次失败时的时间戳。但是,除非您至少将应用程序拆分为以提升权限运行的服务器进程(这也意味着“普通用户”无法安装应用程序,只有具有管理员权限的用户),用户也可以更改注册表很容易绕过密码睡眠。

当然,一种简单但相对有效的方法来防止“睡上第三个错误的密码”是​​为每次不良尝试睡几秒钟。这将使得机器破解密码变得非常困难,因为现在每次尝试都是错误的,而不是典型密码比较的“几乎即时”。

你显然要问自己,与有人试图闯入应用程序的风险相比,做这一切的价值是多少。你在保护什么,有人闯入的价值是什么?完全绕过密码是多么困难(例如通过密码检查进行二进制修补)?密码/用户名如何存储在系统上(具有足够技能的人是否可以解码文件中的密码?)

可能没有牢不可破的应用程序/密码系统。这只是一个问题,你做得多么艰难,有人打破它的价值 - 如果价值很高而且你有合适的人在打破它,它可以被打破,无论它受到多么好的保护。如果没有其他工作,那些知道密码的人可能会发生勒索,折磨或其他事情......当然,大多数人都不会这样做以找到你的Facebook或SO密码。但是,如果您在国际银行工作,则需要的不仅仅是用户名/密码,以保护银行的全部内容不被虹吸掉......