0

获得这种解决方案的利弊是件好事。并获得意见,该解决方案在防止攻击方面有多大用处(它有多大帮助)。

每个用户名(用户)都有唯一的登录网址。这是示例https://secure.freshbooks.com/loginSearch.php

我看到这样的优点:

  1. 多个用户可以使用相同的用户名
  2. 对于每个用户名,hacker 必须使用不同的 url(这里的问题是:对于黑客来说,难度有多大?可能编写特殊程序很容易)
  3. 获取 url 登录需要很长时间(与单一 login.php 相比)
  4. ....可能有更多的优点

我认为的缺点是为每个用户名创建单独的子域。使用 like 可能会更好www.page.com/user/。此外,如果例如 100000 个用户想要相同的用户名。命名 url 的更好解决方案是..../username什么?

问题是如何编码?来自mysql的用户名;将用户名添加到 url... 然后呢?

很高兴知道你的意见。

希望这不会被视为题外话或重新发布问题...

4

4 回答 4

1

我在 PHP 中创建了一个负责暴力攻击保护的类。

https://github.com/ejfrancis/BruteForceBlocker

它将站点范围内的所有失败登录记录在数据库表中,如果过去 10 分钟(或您选择的任何时间范围)内的失败登录次数超过设定的限制,它会强制执行时间延迟和/或验证码要求在再次登录之前。

例子:

//建立油门设置数组。(# 最近失败的登录 => 响应)。

$throttle_settings = [

    50 => 2,            //delay in seconds
    150 => 4,           //delay in seconds
    300 => 'captcha'    //captcha 

];

$BFBresponse = BruteForceBlocker::getLoginStatus($throttle_settings);

//$throttle_settings 是一个可选参数。如果不包含,将使用 BruteForceBlocker.php 中的默认设置数组

开关($BFBresponse['status']){

case 'safe':
    //safe to login
    break;
case 'error':
    //error occured. get message
    $error_message = $BFBresponse['message'];
    break;
case 'delay':
    //time delay required before next login
    $remaining_delay_in_seconds = $BFBresponse['message'];
    break;
case 'captcha':
    //captcha required
    break;

}

于 2014-06-14T22:10:58.387 回答
1

使用蛮力攻击的黑客已经知道他们试图入侵的用户名。他们只会暴力破解密码,所以这并不是一个真正有效的防御措施。

更好的方法可能是对登录尝试进行限制,但将其设置为普通用户不应该看到的非常高的值,例如 100。

于 2013-02-20T12:18:44.383 回答
0

像这样的伪代码呢?

    $searchresult = mysql_query($searchquery) or die(mysql_error());
    if (mysql_num_rows($searchresult) == 0) {
       echo "no rows found";  (DIE)
    }

    else {
    $attemptTime = "SELECT TimeStamp FROM UserLogTable WHERE `UserName` LIKE '%{$userName}%'";
    $attempts = "SELECT attempts FROM UserLogTable WHERE `UserName` LIKE '%{$userName}%'";

    if ( $attemptTime < time()-10 ){  // Reset attempt after 10 min
attempts = 0;
   "INSERT "$attempts" INTO attempts / UserLogTable WHERE `UserName` LIKE '%{$userName}%'";
}

     if (attempts > 3) { 
     echo "Too many attempts you must wait 5 minutes")

      else { 
       Run database check on password 
          if ( password failed ) {
          $attempts++
          "INSERT "$attempts" INTO attempts / UserLogTable WHERE `UserName` LIKE '%{$userName}%'";
          DIE("Bad Login")
          else { 
           $attempts = 0
          "INSERT "$attempts" INTO attempts / UserLogTable WHERE `UserName` LIKE '%{$userName}%'"; // reset attempts
           login user 
           }
于 2017-12-12T18:36:07.483 回答
-1

只是一个想法......为什么不禁止在x次攻击失败后攻击IP?或者(可能更容易),需要人工验证(例如验证码)来破坏脚本攻击。我在实际编码方面并不聪明(尽管我使用新的 HTML5 拖放作为验证码的替代方法),但总体思路应该可行,是吗?

于 2013-02-20T13:58:23.537 回答