在不使用MySQL的情况下防止暴力破坏

时间:2014-04-06 00:18:43

标签: ubuntu nginx security

我正在研究阻止用户强制登录脚本的方法。我找到了两个好方法:

-Use reCaptcha
-Check database before verifying user info to see how 
 many requests the user has made in the last x secs/mins

我宁愿不必使用验证码,因为它们很难看,我知道很多用户都不喜欢它们,我认为数据库方法效率不高

想象一下,用户运行一个bruteforcer并且每秒发出大量请求。如果必须建立连接,那么在数据库服务器上是不是很难 - >获取之前的请求数量 - >每秒关闭一次?

我的意思是,我总是可以设置它,以便在x秒后阻止用户的IP连接到我的服务器,但数据库方法仍然是最好的方法吗?

有谁知道防止登录暴力的好方法?我运行了安装了最新nginx的Ubuntu 13.10服务器。

1 个答案:

答案 0 :(得分:0)

如果您正在使用PHP(并且问题中的术语“NGINX”让我这么认为),那么您可以比较用户上次操作之间的差异(以毫秒为单位)(页面视图/表单提交/ ... )和当前时间戳(使用$ _SESSION)

示例: 下面的代码应放在app标题中(page_top.php或其他)

session_start();

$threshold = 500; // miliseconds

$_SESSION["current_timestamp"] = microtime(true);

if ($_SESSION["current_timestamp"] - $_SESSION["last_timestamp"] <= $threshold) {
   // 500 miliseconds didn't pass since the user last action
   die('Slow down ...');
}
else {
   // update the last timestamp with the current one
   $_SESSION["last_timestamp"] = $_SESSION["current_timestamp"]; 
}