Hostujemytanio – Hosting stron WWW

Dodatkowe hasło do ...
 
Powiadomienia
Wyczyść wszystko

Dodatkowe hasło do /wp-admin/ dla ekranu logowania

1 Wpisy
1 Użytkownicy
0 Reactions
15 Widoki
David
Admin
Wpisy: 19
Reputacja przyznana:
0 0
Rozpoczynający temat
 

Witam,

Często /wp-admin/ (Wordpress) ma ataki i próby logowania - można to zabezpieczyć dodatkowym skryptem który dodajemy do pliku functions.php
Wklejamy go, ustawiamy własne hasło - teraz żeby zalogować się do WP-ADMIN musimy przejść przez bramkę.
Bramka trzyma 1h - cookies plik

Kod:

add_action('init', function () {

    // tylko login i admin
    if (
        !preg_match('#/(wp-login\.php|wp-admin)#', $_SERVER['REQUEST_URI'])
    ) {
        return;
    }

    // allow ajax, cron, rest
    if (
        defined('DOING_AJAX') ||
        defined('DOING_CRON') ||
        defined('REST_REQUEST')
    ) {
        return;
    }

    // już przeszedł bramkę
    if (!empty($_COOKIE['wp_pre_gate']) && $_COOKIE['wp_pre_gate'] === '1') {
        return;
    }

    $error = '';

    // submit
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['gate_nonce'])) {

        if (!wp_verify_nonce($_POST['gate_nonce'], 'gate')) {
            $error = 'Błąd zabezpieczeń.';
        } elseif (($_POST['gate_pass'] ?? '') === 'TUTAJ_PODAJ_HASŁO!') {

            setcookie(
                'wp_pre_gate',
                '1',
                time() + HOUR_IN_SECONDS,
                COOKIEPATH,
                COOKIE_DOMAIN,
                is_ssl(),
                true
            );

            wp_safe_redirect($_SERVER['REQUEST_URI']);
            exit;
        } else {
            $error = 'Nieprawidłowe hasło.';
        }
    }

    // render BRAMKI (ZANIM WP)
    ?>
    <!doctype html>
    <html lang="pl">
    <head>
        <meta charset="utf-8">
        <title>Dostęp zabezpieczony!</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style>
            body {
                margin: 0;
                height: 100vh;
                display: grid;
                place-items: center;
                background: radial-gradient(circle at top, #1f2937, #020617);
                font-family: system-ui, sans-serif;
                color: #fff;
            }
            .gate {
                background: #fff;
                border: 1px solid #BD4D46;
                padding: 36px;
                border-radius: 16px;
                width: 80%;
                max-width: 380px;
                box-shadow: 0 30px 80px rgba(0,0,0,.6);
            }
            h1 {
                margin: 0 0 20px;
                font-size: 18px;
                text-align: center;
                letter-spacing: .5px;
            }
            input {
                width: 92%;
                padding: 14px;
                border-radius: 10px;
                border: 1px solid #BD4D46;
                background: #020617;
                color: #BD4D46;
                font-size: 16px;
            }
            button {
                margin-top: 16px;
                width: 100%;
                padding: 14px;
                border-radius: 10px;
                border: none;
                background: linear-gradient(135deg,#000,#000);
                color: #fff;
                font-size: 16px;
                cursor: pointer;
            }
            .error {
                margin-bottom: 12px;
                text-align: center;
                color: #fb7185;
                font-size: 14px;
            }
        </style>
    </head>
    <body>
        <form class="gate" method="post">
            <h1>DOSTĘP ZABEZPIECZONY</h1>

            <?php if ($error): ?>
                <div class="error"><?= esc_html($error) ?></div>
            <?php endif; ?>

            <input type="password" name="gate_pass" placeholder="Hasło dostępu" autofocus required>

            <?php wp_nonce_field('gate', 'gate_nonce'); ?>

            <button>Kontynuuj</button>
        </form>
    </body>
    </html>
    <?php
    exit;
});

 

Za zmianę czasu odpowiada ten fragment:

setcookie( 'wp_pre_gate', '1', time() + HOUR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true );

 

Jest to o tyle fajne że jeżeli ktoś zapomni się wylogować to po 1h musi podać hasło.
Czyli osoba postronna ma mniejszą szanse na dostanie się i nabrojenie jeżeli ktoś zapomni się wylogować.
Dodatkowo zmniejsza zawsze szanse na siłowe dostanie się do /wp-admin/ , oczywiście nie jest to nie wiadomo jakie zabezpieczenie - ale na pewno lepsze takie niż samo /wp-admin/


Ten temat został zmodyfikowany 1 miesiąc temu 3 razy przez David

Główny administrator i założyciel hostujmytanio.pl

 
Opublikowano : 18/02/2026 7:44 pm
Udostępnij: