我只是在考虑为我的管理面板提供额外的保护。我可以发送一些HTTP标头,让我们用一些长值将其称为Mushroom-Token
。当它不在请求中或具有无效值时,我的管理面板会抛出 404。
当然,这只是额外的保护层。当此令牌有效时,用户仍需要以管理员身份登录。
这种方法有意义吗?这难道不是通过默默无闻获得安全的例子吗?或者也许它是广泛使用的技术?最后,还有哪些其他想法可以为管理面板提供额外保护?
防止暴力攻击的正确方法是使其足够慢,以至于暴力破解是不可行的。
这可以通过多种方式完成(假设在线攻击):
- 通过对帐户进行速率限制尝试来限制尝试
- 在帐户的多次错误登录尝试中添加验证码
- 在整个系统上多次错误登录尝试时添加验证码
- 在系统范围内多次错误登录尝试中阻止IP(这不会阻止太多,因为攻击者可以轻松获得许多帐户)
由于以下几点,您在标头 imo 中使用令牌的想法将不起作用:
- 令牌几乎是公开的,因为客户端必须拥有它
- 一旦您的任何客户共享令牌,一切都会丢失
- 一旦您的任何客户变得流氓,任何东西都会丢失
- 一旦令牌被恶意使用,就没有简单的方法来重置令牌并将其传递给非恶意客户端
您正在谈论一个管理面板,所以我假设和某个后端的 Web 界面。这将涉及浏览器。您没有简单的方法告诉浏览器他们需要将所述标头添加到他们将要发出的请求中。
以上假设您将对所有客户端使用单个令牌。这意味着您只需要一个恶意用户,一切都会丢失。
如果上述假设是错误的,并且您将为每个客户端提供一个唯一的令牌,那么您会遇到客户端以某种方式需要首先获取令牌的问题(这应该基于身份验证,这给您留下了 catch 22 的情况)。这也意味着只有一个用户能够使用特定的客户端,因为此时令牌同时绑定到客户端和令牌。
为我的英语不好感到抱歉,我希望你能理解我想告诉你的。
有了这种"安全性",我认为您可以防止某些会话劫持攻击。但是还有很多其他方法可以做到这一点,例如重新生成会话ID,将用户IP设置为会话(然后您必须检查最后一个IP是否与当前IP相同)等...
如果你希望它更安全,你也可以把它设置为只能从SSL和某些IP访问。
您可以通过检查 IP 在没有秘密标头/具有错误标头值的情况下访问管理面板的次数来添加诸如反暴力保护之类的内容。然后阻止在一段时间内重试太多的 IP......
啊,是的,添加管理面板访问和操作的完整日志记录可以很好地检查攻击是否成功。
最后,大多数攻击都是在服务器端完成的,我的意思是,如果你有一个旧的 apache、nginx、php 版本等......如果您让所有人开放端口...我无法列出所有可能的攻击。因此,保护您的脚本是一件好事,但不要忘记其余部分。
我希望这能给你反思的方式。
编辑
我看到你想防止暴力攻击,第一层是服务器端,带有代理或防火墙,比如HAProxy,它能够在短时间内阻止太多连接(这会减慢蛮力的速度,并防止你的数据库被访问太多)
您还应该使用强密码:- 最少 10 个字符- 1 个数字,1 分钟,1 个数字,1 个特殊字符(如 @、!、# ...)
我不允许 TOR 检查这个
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
}