如果用户尝试多次登录,如何触发?

时间:2018-07-20 19:01:04

标签: php html mysql security

我有一个用于登录的表格:

<form action="form.php" method="post">
    <input type="text" name="name" placeholder="Type your name">
    <input type="password" name="password" placeholder="Type your password" >
    <input type="submit" name="submit" value="Login">
</form>

例如,仅当用户尝试登录3次以上时,我才想添加Google Recaptcha:

<form action="form.php" method="post">
    <input type="text" name="name" placeholder="Type your name">
    <input type="password" name="password" placeholder="Type your password" >
    <?php
        if(){ // Check if submitted more than 3 times.
            <div class="g-recaptcha" data-sitekey="=== Your site key ==="></div>
        }
    ?>
    <input type="submit" name="submit" value="Login">
</form>

我正在考虑使用 Cookies ,在验证和登录失败后,添加一个值为1的cookie,如果该cookie存在,则增加1。

if( isset($_COOKIE['tries']) ){
    createcookie('tries', $_COOKIE['ties'] +1 );
}else{
    createcookie('tries', '1');
}

但是如果禁用了cookie,该怎么办?!

我也在考虑使用 IP地址,使用试图登录但登录失败的用户的IP地址创建一个表:

__________________________________
|        |          |             |
|   ip   |   count  |   date      |
|________|__________|_____________|

计数是登录失败的时间,日期是今天的日期,因此,如果它是今天的日期且计数> 3,则显示验证码。

但是,如果用户使用VPN,该怎么办?

有可靠的方法吗?

stackoverflow如何做到这一点?

2 个答案:

答案 0 :(得分:0)

会话如何?

每次处理登录时,在会话中增加一个变量。然后检查会话var,如果它大于3,则显示recaptcha。

session_start();
$_SESSION["logins"]++;

---

if($_SESSION["logins"] >= 3)...

答案 1 :(得分:0)

没有客户端Cookie,您将需要一个包含iplast-attemptattempts的数据库表。

  • 如果last-attempt的使用时间超过5分钟,请将尝试次数重置为0。
  • 设置last-attemptattempts+1
  • 如果尝试次数> 3,则显示验证码

除非您在公司防火墙后面有很多用户,否则上述内容应该起作用。如果客户端将cookie与会话结合使用,您也可以使用cookie。