防止暴力破解

11 浏览
0 Comments

防止暴力破解

可能重复:

防止网站暴力破解登录

在PHP中限制用户登录尝试

我想知道在登录表单中防止暴力破解的最佳方法是什么。

意思是如何保存尝试次数和时间限制?会话是一个好主意吗?

谢谢。

0
0 Comments

预防暴力破解是一个常见的安全问题。它的出现原因可能是因为用户尝试多次登录,密码和用户名不匹配,或者攻击者试图通过禁用会话来绕过安全限制。为了解决这个问题,可以采取以下措施:

1. 为每个访问网站的人自动启动一个会话,并在会话变量中存储登录尝试的次数和解锁的时间。

2. 在处理登录时,如果密码和用户名不匹配且时间限制未过期且尝试次数已超过限制,则向用户显示一条消息。

3. 可以在数据库表中创建一个会话表,其中包含以下字段:

sessions

==========

id

num_tries //登录尝试的次数

block_expires //如果被封锁,解封的时间

这种方法假设用户使用会话cookie。但用户可以通过清除cookie来绕过这个限制。为了降低风险,可以在处理过程中添加一些智能功能:

- 如果登录尝试来自同一IP地址,并且尝试访问的账户没有变化,则封锁该账户(而不是会话)一段时间。

然而,强烈不建议这样做,因为攻击者可能会禁用会话,从而绕过该限制。为了进一步提高安全性,可以采取其他措施,例如增加验证码、实施双因素身份验证等。预防暴力破解是一个重要的安全问题,可以通过使用会话变量、封锁账户和其他安全措施来解决。

0
0 Comments

防止暴力破解的问题出现的原因是用户可以无限次尝试登录,从而可能猜测出正确的密码。为了解决这个问题,可以创建一个包含了每次失败尝试的时间戳的SQL表格。然后,在登录失败时,可以通过使用cookie或每次查询来检查尝试次数和时间戳。

在这个PHP论坛上讨论了这个问题。大家达成的共识是,创建一个SQL表格来记录每次登录失败的尝试,包括时间戳。然后,可以在登录失败时查询该表格,并使用cookie或每次查询来检查尝试次数和时间戳。

以下是实现这个解决方案的示例代码:

// 创建一个名为"failed_login_attempts"的SQL表格

CREATE TABLE failed_login_attempts (

id INT AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(255) NOT NULL,

timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

// 在登录失败时将尝试记录插入到表格中

$username = $_POST['username'];

$query = "INSERT INTO failed_login_attempts (username) VALUES ('$username')";

mysqli_query($connection, $query);

// 检查尝试次数和时间戳

$username = $_POST['username'];

$query = "SELECT COUNT(*) AS attempts FROM failed_login_attempts WHERE username = '$username'";

$result = mysqli_query($connection, $query);

$row = mysqli_fetch_assoc($result);

$attempts = $row['attempts'];

if ($attempts >= 3) {

// 如果尝试次数超过3次,禁止登录

echo "登录失败次数过多,请稍后再试。";

} else {

// 如果尝试次数没有超过3次,允许登录

echo "登录成功。";

}

0