使用秘密HTTP标头保护管理面板 - 这是愚蠢的吗?

时间:2016-04-27 11:38:37

标签: php security http authentication admin

我只想为我的管理面板提供额外的保护。我可以发送一些HTTP标头,让我们用一些长值来称呼它Mushroom-Token。当它不在请求中或者它具有无效值时,我的管理面板将全部抛出404。

那当然只是额外的保护层。当此令牌有效时,用户仍需要以管理员身份登录。

这种方法有意义吗?这不是通过默默无闻的安全示例吗?或者它可能是广泛使用的技术?最后,还有哪些其他针对管理面板的额外保护的想法?

2 个答案:

答案 0 :(得分:4)

防止暴力攻击的正确方法是让它足够慢,以至于暴力破坏是不可行的。

这可以通过多种方式完成(假设在线攻击):

  1. 通过对帐户进行速率限制尝试来限制尝试
  2. 为帐户上的多次错误登录尝试添加验证码
  3. 在整个系统上添加多次不正确登录尝试的验证码
  4. 阻止系统范围内多次不正确的登录尝试(这不会阻止很多,因为攻击者可以轻松获取大量帐户)
  5. 您在标题imo中使用令牌的想法因为以下几点而无效:

    • 令牌非常公开,因为客户端必须拥有它
    • 一旦您的任何客户共享该令牌,一切都将丢失
    • 一旦你的任何客户变得流氓,任何东西都会丢失
    • 一旦恶意使用令牌,就没有简单的方法来重置令牌并将其传递给非恶意客户端

    您正在谈论一个管理面板,所以我假设和一些后端的Web界面。这将涉及浏览器。没有简单的方法告诉浏览器他们需要将所述标题添加到他们将要发出的请求中。

    以上假设您将为所有客户端使用单个令牌。这意味着您只需要一个恶意用户,而且一切都会丢失。

    如果上述假设是错误的并且您要为每个客户端提供唯一令牌,那么您将遇到客户端以某种方式需要首先获取令牌的问题(这应该基于身份验证,这将使您获得捕获22情况)。这也意味着只有一个用户才能使用特定的客户端,因为此时令牌既绑定了客户端又绑定了令牌。

答案 1 :(得分:0)

我已经为我糟糕的英语感到抱歉,我希望你能理解我想告诉你的事情。

有了这种'安全',我认为你可以防止一些会话劫持攻击。但是还有很多其他方法可以做到这一点,比如重新生成会话ID,将用户IP设置为会话(然后你必须检查最后的IP是否与当前IP相同),等等......

如果您希望它更安全,您也可以将其设置为仅可从SSL&一些IP。

您可以通过检查IP访问管理面板的次数而不使用秘密标头/错误的标头值来添加反暴力保护等内容。然后阻止在一段时间内重试太多的IP ......

啊,是的,并添加完整的管理面板访问记录和&行动可以很好地检查攻击是否成功。

最后,大多数攻击是在服务器端完成的,我的意思是,如果你有一个旧的apache,nginx,php版本等...如果你让所有人都打开端口...我无法列出所有可能的攻击。因此,保护​​您的脚本是件好事,但不要忘记其余部分。

我希望这会给你反思。

修改

我看到你想要防止暴力攻击,第一层是服务器端,有一种代理或防火墙,比如HAProxy可以在很短的时间内阻止过多的连接(这会减慢暴力,并防止您的数据库访问太多)

您还应该使用强密码: - 最少10个字符 - 1个maj,1分钟,1个数字,1个特殊字符(如@,!,#...)

我会拒绝TOR check this

PHP例证

function IsTorExitPoint($ip = null)
{
    if(is_null($ip))
    {
        $ip = $_SERVER['REMOTE_ADDR'];
    }

    $stuff = ReverseIPOctets($ip) . "." . $_SERVER['SERVER_PORT'] . "." . 
             ReverseIPOctets($_SERVER['SERVER_ADDR']) . ".ip-port.exitlist.torproject.org";

    if (gethostbyname($stuff)=="127.0.0.2")
    {
        return true;
    }
    else
    {
        return false;
    }
}

function ReverseIPOctets($inputip)
{
    $ipoc = explode(".",$inputip);
    return $ipoc[3].".".$ipoc[2].".".$ipoc[1].".".$ipoc[0];
}

if(IsTorExitPoint($_SERVER['REMOTE_ADDR']))
{
    // do disallow stuff
}