Tutorial 2x 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

PVS

Super Moderator
Thành viên BQT
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.

1.png

Để 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
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​
 
Back
Top