我有一个用于登录的表格:
<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如何做到这一点?
答案 0 :(得分:0)
会话如何?
每次处理登录时,在会话中增加一个变量。然后检查会话var,如果它大于3,则显示recaptcha。
session_start();
$_SESSION["logins"]++;
---
if($_SESSION["logins"] >= 3)...
答案 1 :(得分:0)
没有客户端Cookie,您将需要一个包含ip
,last-attempt
和attempts
的数据库表。
last-attempt
的使用时间超过5分钟,请将尝试次数重置为0。last-attempt
和attempts+1
除非您在公司防火墙后面有很多用户,否则上述内容应该起作用。如果客户端将cookie与会话结合使用,您也可以使用cookie。