How to prevent spam auto-registering account for XenForo 2 - Cách ngăn chặn spam tự động đăng ký tài khoản cho XenForo 2
Bài viết này sẽ hướng dẫn các bạn cách chống spam tự động đăng ký nick cho XenForo 2.
Để thực hiện việc này, vui lòng làm theo hướng dẫn:
Vào template "PAGE_CONTAINER" và tìm
Thay bằng:
Sau đó, tạo một tệp có tên antispam.php bên cạnh index.php và dán đoạn code sau vào đó:
Đi tới src/XF/Pub/Controller/Register.php
Tìm:
Và thay bằng:
Coded sẽ chặn IP trong 300 giây nếu nhập sai mật khẩu, đảm bảo an ninh XSS.
Vậy là xong.
Chúc các bạn thành công.
Bài viết này sẽ hướng dẫn các bạn cách chống spam tự động đăng ký nick cho XenForo 2.
Vào template "PAGE_CONTAINER" và tìm
Mã:
<xf:if is="$xf.options.registrationSetup.enabled">
<a href="{{ link('register') }}" class="p-navgroup-link p-navgroup-link--textual p-navgroup-link--register"
data-xf-click="overlay" data-follow-redirects="on">
<span class="p-navgroup-linkText">{{ phrase('register') }}</span>
</a>
</xf:if>
Thay bằng:
Mã:
<xf:if is="$xf.options.registrationSetup.enabled">
<a href="{{ link('register') }}" class="p-navgroup-link p-navgroup-link--textual p-navgroup-link--register"
data-follow-redirects="on">
<span class="p-navgroup-linkText">{{ phrase('register') }}</span>
</a>
</xf:if>
Sau đó, tạo một tệp có tên antispam.php bên cạnh index.php và dán đoạn code sau vào đó:
PHP:
<?php
session_start();
// Change to your actual password
$real_password = 'XenForo';
// Generate hashed password
$correct_password_hash = password_hash($real_password, PASSWORD_DEFAULT);
// Maximum number of login attempts before IP lockout
$max_login_attempts = 3;
// Lockout duration after reaching maximum login attempts (in seconds)
$lockout_duration = 300; // 5 minutes
// Check login status
if (!isset($_SESSION['loggedIn'])) {
$_SESSION['loggedIn'] = false;
}
// Check if IP is locked
if (isset($_SESSION['failed_login_attempts']) && $_SESSION['failed_login_attempts'] >= $max_login_attempts && isset($_SESSION['lockout_time']) && $_SESSION['lockout_time'] > time() - $lockout_duration) {
$time_remaining = $_SESSION['lockout_time'] - time();
die("IP locked out. Please try again in $time_remaining seconds.");
}
// Check password when submitted
if (isset($_POST['password'])) {
$password = $_POST['password'];
if (password_verify($password, $correct_password_hash)) {
$_SESSION['loggedIn'] = true;
$_SESSION['failed_login_attempts'] = 0; // Reset failed login attempts when login succeeds
header("Location: /register/index.php");
exit();
} else {
// Increase failed login attempts
$_SESSION['failed_login_attempts'] = isset($_SESSION['failed_login_attempts']) ? $_SESSION['failed_login_attempts'] + 1 : 1;
// If maximum login attempts reached, lock IP
if ($_SESSION['failed_login_attempts'] >= $max_login_attempts) {
$_SESSION['lockout_time'] = time() + $lockout_duration;
$error = "IP locked out. Please try again in $lockout_duration seconds.";
} else {
$error = 'Invalid password.';
}
}
}
if (!$_SESSION['loggedIn']): ?>
<html>
<head>
<title>Register User</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="description" content="Register users" />
<meta name="keywords" content="Register users" />
</head>
<body>
<div align="center">
<?php if (isset($error)) echo "<p>" . htmlspecialchars($error) . "</p>"; ?>
<p>Please enter XenForo below:</p>
<form method="post">
Password: <input type="password" name="password">
<input type="submit" name="submit" value="Login">
</form>
<?php
if(isset($_SESSION['lockout_time']) && $_SESSION['lockout_time'] > time() - $lockout_duration) {
$time_remaining = $_SESSION['lockout_time'] - time();
echo "Time remaining: $time_remaining seconds";
}
?>
</div>
</body>
</html>
<?php
exit();
endif;
?>
Đi tới src/XF/Pub/Controller/Register.php
Tìm:
PHP:
namespace XF\Pub\Controller;
Và thay bằng:
PHP:
namespace XF\Pub\Controller;
include 'antispam.php';
Coded sẽ chặn IP trong 300 giây nếu nhập sai mật khẩu, đảm bảo an ninh XSS.
Vậy là xong.
Chúc các bạn thành công.
Nguồn: xenforo.com
Bài viết liên quan
Bài viết mới