我总是想知道我创建的登录系统是否容易受到攻击。
与许多其他程序员一样,我也使用会话来保存特定的令牌令牌以了解登录状态。用于保存用户名甚至有时保存状态的 Cookie。
我想知道的是,这是正确的方法吗?有没有比这更好的方法?
我总是想知道我创建的登录系统是否容易受到攻击。
与许多其他程序员一样,我也使用会话来保存特定的令牌令牌以了解登录状态。用于保存用户名甚至有时保存状态的 Cookie。
我想知道的是,这是正确的方法吗?有没有比这更好的方法?
您可以在会话上创建自己的自定义检查。确保它是由相同的用户代理从相同的 IP 地址创建的。
除此之外,会话非常可靠。
在登录部分,您将执行以下操作:
$_SESSION['_user_agent'] = $_SERVER['HTTP_USER_AGENT'];
$_SESSION['_remote_addr'] = $_SERVER['REMOTE_ADDR'];
然后您可以检查每个请求:
function sessionIsOK ()
{
return ($_SESSION['_user_agent'] == $_SERVER['HTTP_USER_AGENT'] &&
$_SESSION['_remote_addr'] == $_SERVER['REMOTE_ADDR']);
}
我认为你是否使用 https 很重要:如果你使用的是 http 而不是 https,那么系统就有很多漏洞:例如重播和中间人/中继。
常见 PHP 登录系统的替代方案是 HTTP 身份验证。这不需要使用会话/cookie。特别是 HTTP Digest 身份验证比未加密的 <form> 登录更安全。(大多数共享主机提供商不提供 SSL。如果,大多数 FLOSS webapps 很少设置它。)
但是,存在一些可用性缺陷,只能通过大量使用 DHTML/AJAX 来缓解。它会稍微降低服务器性能。最重要的是:对于大多数程序员来说,实现它太难了。
如果一个简单的 PHP 登录系统就足够了,这取决于您的应用程序的类型。