WP-login.php'yi Devre Dışı Bırak veya Yeniden Yönlendir


10

Giriş yapmış olsun veya olmasın ziyaretçilerin ulaşmasını önlemenin bir yolu var mı mysite.com/wp-login.php?

Tek ihtiyacımız olan ayrı bir giriş formum var. Oluşturduğum formu yeniden şekillendirebileceğimi biliyorum, wp-loginancak bununla uğraşmak istemem. Çeşitli filtreleri ve kancaları denedim ve yeniden yönlendirmesini sağlayamıyorum. Ayrıca bir .htaccessyönlendirme kullanmayı denedim ve bunun işe yaradığını gördüm, ancak daha sonra özel giriş / çıkış formumun çalışmasını engelliyor.

Fikirler?


Bunu güvenlik nedeniyle mi yapıyorsun? neden sadece wp-login.php için kimlik doğrulaması uygulamıyorsunuz?
Gaia

Bununla ne demek istediğini bilmiyorum. Lütfen biraz genişletin. TIA.
jchwebdev

NEDEN ayrı bir giriş formuna ihtiyacınız var? güvenlik nedenleriyle?
Gaia

Bugünlerde çok fazla insanın 'wp-login' bilgisinin farkında olduğunu görüyoruz. Bunun bu kadar açık olmasını istemezdik. Bana 'neden kimlik doğrulaması uygulamadığının' ne anlama geldiğini söyleyebilir misin? TIA
jchwebdev

verilen cevaba bakınız.
Gaia

Yanıtlar:


19

Bu soruyu bulduktan ve cevaplardan birkaçını test ettikten sonra, aşağıda bir üretim ortamında kullandığımın "temizlenmiş" bir sürümü yer almaktadır.

Bu sürüm herhangi bir bildirim / hata atmaz ve ayrıca şifre sıfırlamalarının çalışmasına izin verir:

// Hook the appropriate WordPress action
add_action('init', 'prevent_wp_login');

function prevent_wp_login() {
    // WP tracks the current page - global the variable to access it
    global $pagenow;
    // Check if a $_GET['action'] is set, and if so, load it into $action variable
    $action = (isset($_GET['action'])) ? $_GET['action'] : '';
    // Check if we're on the login page, and ensure the action is not 'logout'
    if( $pagenow == 'wp-login.php' && ( ! $action || ( $action && ! in_array($action, array('logout', 'lostpassword', 'rp', 'resetpass'))))) {
        // Load the home page url
        $page = get_bloginfo('url');
        // Redirect to the home page
        wp_redirect($page);
        // Stop execution to prevent the page loading for any reason
        exit();
    }
}

Bu, WP-Login'i (iyi) önlüyor gibi görünüyor, ancak son çıkış (), gerçek girişin () oluşmasını engelliyor gibi görünüyor ki bu istediğimiz şey değil. İnsanların giriş yapabilmesini istiyoruz, sadece WP-Login ekranını asla göremiyoruz. Yanlış bir PW girerse, özel giriş sayfamıza yönlendirmelidir.
jchwebdev

Düzenlendi ve şimdi çalışıyor: in_array () yapmadan önce $ eyleminin dolu olup olmadığını kontrol etmeniz gerekiyor
simonthesorcerer

Bu benim için işe yaramadı. Hala giriş yapabilirdim.
Mike

@Mike - Kancanızın çalıştığından / çalıştığından emin misiniz? echo "HERE";İşlevin içine koyarsanız ne olur ? Yankı mı?
random_user_name

1
@cale_b Evet, kanca iyi çalışıyor. Sorun şu ki $_GET['action']benim için boş. Form /wp-login.php(URL'de herhangi bir GET değişkeni olmadan) yayınlanır ve kaynağa bakıldığında adlandırılmış bir put actionbile yoktur, bu nedenle $_REQUEST['action']boştur.
Mike

10

Bunu temanızın işlevlerinde deneyin. Php

add_action('init','custom_login');

function custom_login(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow && !is_user_logged_in()) {
  wp_redirect('http://yoursite.com/');
  exit();
 }
}

benim için çalışıyoruz ama ben çıkış sorunları yaşıyorum ve nedenini anlayamıyorum
Androliyah

7
Çünkü wp-login.php oturumu kapatmayı da yönetir.
Brian Fegter

Evet, bu benim özel giriş formumu engelliyor. Ancak, var veya belki de yönlendiren isteği güvenilir bir şekilde kontrol etmenin bir yolu varsa? IOW: bu bir başlangıç ​​noktası olabilir. Başkası var mı? TIA - JC
jchwebdev

Ah evet, wp-login oturumu kapatıyor. Lol. Bu mantıklı. Belki bir eklentiye sahip bu kod yeterli olacaktır. Bakalım başka ne kullanabiliriz çünkü wp-login kullanmaktan nefret ediyorum.
Androliyah

Tüm gerekli olduğunu düşünüyorum wp-login yüklendiğinde istek değişir izlemek olacaktır. Şu anda bunu yapabilen bir makinem yok.
jchwebdev

4

Çıkış eylemi için bir GET var ekleyin ve iyi çalışıyor.

add_action('init','custom_login');

function custom_login(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow && $_GET['action']!="logout") {
  wp_redirect('http://YOURSITE.com/');
  exit();
 }
}

Şimdiye kadar, bu istediğimiz en yakın olanı. Exit () öğesini kaldırır ve wp_redirect'i özel giriş sayfamıza değiştirirsek, işi yapıyor gibi görünüyor.
jchwebdev

3

WordPress eklentisini Rename wp-login.php'yi oldukça uzun süredir kullanıyorum .

Başka wp-login.phpherhangi bir yola geçmenizi sağlar . Botları giriş sayfalarıma çarptı ve şimdi sıfır isabet aldım.


1

WP-login giriş, çıkış, kayıt, şifre sıfırlama ve alma işlemlerini gerçekleştirir. Kullanıcı arabirimi giriş sayfasını değiştirmek istediğinizi varsayarsak. Aşağıdaki kodu güvenle kullanabilirsiniz:

function custom_login_page() {
 $new_login_page_url = home_url( '/login/' ); // new login page
 global $pagenow;
 if( $pagenow == "wp-login.php" && $_SERVER['REQUEST_METHOD'] == 'GET') {
    wp_redirect($new_login_page_url);
    exit;
 }
}

if(!is_user_logged_in()){
 add_action('init','custom_login_page');
}

Bu kod snippet'i:

  1. Tüm web sitesi ziyaretçilerini yeni giriş sayfasına yönlendirin.
  2. Çıkış sorunsuz bir şekilde çalışır
  3. Özel giriş sayfanızda özel giriş, kayıt ve şifre sıfırlama formları oluşturmanız gerekecektir.

1
home_url()zaten bir eğik çizgi ekliyor, bu yüzden buna gerek yok. Ayrıca $pagenow(a) yalnızca admin'de (ve belki de girişte) bulunan bir globaldir ve (b) get_current_screen()özellik kontrolleriyle değiştirilmelidir .
kaiser

1
// https://codex.wordpress.org/Plugin_API/Filter_Reference/login_url#Examples
add_filter('login_url', 'custom_login_url', 10, 3);

function custom_login_url($login_url, $redirect, $force_reauth) {
    return home_url('/login/?redirect_to=' . $redirect);
}

Bu, kötü wp-login formu yerine / login'e yönlendirecektir.


hmmm ilginç bir fikir, ama lütfen nasıl / neden çalıştığını açıklayın
Mark Kaplun

Bu işe yaramayacak. Bu, login url için istekleri login_url () yoluyla filtreler, birisinin manuel olarak wp-login.php yazmasını engellemez.
Matt

0

Niyetiniz wp-login.phpyabancıları görebiliyor olsa bile korumaksa, bunu yapmanın en basit ve etkili yolu erişim için yetki (temel kimlik doğrulaması) istemektir wp-login.php.

In Apache, yetkilendirme htaccess bir kombinasyonu ve bir şifre dosyası ile uygulanmaktadır . İlk kez, bir tarayıcı oturumu içinde, herkes erişmeye çalıştığında wp-login.phpbir kullanıcı adı ve parola girmesi istenir (wordpress girişinden önce).

İşleri basitleştirmek için, bu kullanıcı adı ve şifre erişim vermek istediğiniz her kişi için aynı olabilir wp-login.php, çünkü ilk kimlik doğrulama iletişim kutusunu başarıyla geçtikten sonra wordpress girişlerini girmeleri gerekir.


İlginç. Ben 'istemi' kimlik girmek için tarayıcının kalıcı açılır pencere olduğunu varsayalım. Bunun karışıklığa neden olacağını düşünüyorum. İdeal olarak bu URL -nothing -... yapmak ya da belki sadece ana sayfaya yönlendirme yapmak istiyorum. Ama bunun için teşekkürler. Her gün yeni bir şeyler öğrenin!
jchwebdev

Yaptığınızı düşündüğünüz şey "belirsizliğe karşı güvenlik". Ama gerçekte sadece belirsizliğiniz var ve bu korkunç. Bunu kullanma. Kimlik doğrulaması güvenliktir. Giriş noktasını gizlemek belirsizdir. security.stackexchange.com/questions/32064/…
Gaia

1
Başka bir deyişle, wp-login konumunu değiştirseniz bile, hala auth kullanmanız gerekir: "Bağlantımı güvende tutmak için sunucuyu 22'den port 2222'ye değiştirmeye güvenmeli miyim? Kesinlikle hayır. SSH sunucusu aynı zamanda parola kullanırken 2222 numaralı bağlantı noktasına mı? Hayır, bu en iyi çözüm ise, bağlantı noktasını değiştirmek ("Gizlemek") normal bağlantı noktalarını araştıran bir otomatik sömürü tarayıcı yığınını keser. müstehcenlik iyidir, ama biz muğlaklığa güvenmiyoruz. Eğer bulurlarsa hala şifreyi kırmaları gerekir. "
Gaia

Bunun için teşekkürler. Çok öğrendim. Ne aradığını değil, ama yine de ... çok yararlı. En iyi --- JC
jchwebdev

0

$pageidKullanıcıların yönlendirilmesini istediğiniz sayfayla değiştirin

/* Redirect log in page */
function redirect_login_page(){
  // Store for checking if this page equals wp-login.php
   $page_viewed = basename( $_SERVER['REQUEST_URI'] );

  // permalink to the custom login page
  $login_page  = get_permalink($pageid);

  if( $page_viewed == "wp-login.php" ) {
    wp_redirect( $login_page );
    exit();
  }
}

add_action( 'init','redirect_login_page' );

0
<?php
/* Template Name: Register Template */
if(is_user_logged_in()) { $user_id = get_current_user_id();$current_user = wp_get_current_user();$profile_url = get_author_posts_url($user_id);$edit_profile_url = get_edit_profile_url($user_id); ?>
<div class="regted">
    You're login with nickname <a href="<?php echo $profile_url ?>"><?php echo $current_user->display_name; ?></a> Are you want to <a href="<?php echo esc_url(wp_logout_url($current_url)); ?>">Exit</a> ?
</div>
<?php } else { ?>
<div class="register">
    <?php $err = ''; $success = ''; global $wpdb, $PasswordHash, $current_user, $user_ID; if(isset($_POST['task']) && $_POST['task'] == 'register' ) { $pwd1 = $wpdb->escape(trim($_POST['pwd1']));
        $pwd2 = $wpdb->escape(trim($_POST['pwd2']));
        $email = $wpdb->escape(trim($_POST['email']));
        $username = $wpdb->escape(trim($_POST['username']));

        if( $email == "" || $pwd1 == "" || $pwd2 == "" || $username == "") {
            $err = 'Please enter password in this field';
        } else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $err = 'Email is invalid';
        } else if(email_exists($email) ) {
            $err = 'Email is existed';
        } else if($pwd1 <> $pwd2 ){
            $err = 'Password does not match the confirm password';
        } else {
            $user_id = wp_insert_user( array ('user_pass' => apply_filters('pre_user_user_pass', $pwd1), 'user_login' => apply_filters('pre_user_user_login', $username), 'user_email' => apply_filters('pre_user_user_email', $email), 'role' => 'subscriber' ) );
            if( is_wp_error($user_id) ) {
                $err = 'Error on user creation.';
            } else {
                do_action('user_register', $user_id);
                $success = 'Registered Successfully';
            }
        }
    }
    ?>
  <link  rel="stylesheet" type="text/css"  href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<!--display error/success message-->
<div id="message">
        <?php
            if(! empty($err) ) :
                echo ''.$err.'';
            endif;
        ?>
        <?php
            if(! empty($success) ) :
                $login_page  = home_url( '/login' );
                echo ''.$success. '<a href='.$login_page.'> Login</a>'.'';
            endif;
        ?>
    </div>

           <div class="container">    
        <div id="loginbox" style="margin-top:100px;" class="mainbox col-md-6 col-md-offset-3 col-sm-8 col-sm-offset-2">
          <div style="padding-bottom: 50px;" class="col-md-6 col-md-offset-4 col-sm-8 col-sm-offset-2"/><img src="#url.logo"></div>
    <form class="form-horizontal" method="post" role="form">
<div class="form-group">
    <label class="control-label  col-sm-3" for="username">Username:</label>
    <div class="col-sm-9">
    <input type="text" class="form-control" name="username" id="username" placeholder="Username">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-sm-3" for="email">Email:</label>
    <div class="col-sm-9">
        <input type="email" class="form-control" name="email" id="email" placeholder="Email">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-sm-3" for="pwd1">Password</label>
    <div class="col-sm-9">
        <input type="password" class="form-control" name="pwd1" id="pwd1" placeholder="Enter your password">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-sm-3" for="pwd2">Retype password:</label>
    <div class="col-sm-9">
        <input type="password" class="form-control" name="pwd2" id="pwd2" placeholder="Retype password">
    </div>
</div>
<?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
<div class="form-group">
    <div class="col-sm-offset-3 col-sm-9"  style="text-align:center;">
    <button type="submit" class="btn btn-primary">Register</button>
    <input type="hidden" name="task" value="register" /><br/>
    </div>
</div>
</form>
</div>
</div>
</div>
<?php 
get_footer();
 ?>
<div class="message">
    <?php
        $login  = (isset($_GET['login']) ) ? $_GET['login'] : 0;
        if ( $login === "failed" ) {
                echo '<strong>Error</strong> Wrong username or password!';
        } elseif ( $login === "empty" ) {
                echo '<strong>Error:</strong>Username or password is blank field.';
        } elseif ( $login === "false" ) {
                echo '<strong>ERROR:</strong> Exit';
        }
    ?>
</div>
<?php } ?>

Özel giriş sayfama örnek. Login.php ve put kodunu kaydetme

add_action('init','wpse_login');

function wpse_login(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow && !is_user_logged_in()) {
  wp_redirect('http://yoursite.com/login.php');
  exit();
 }
}

içinde functions.php


Sorunuzu düzenleyebilir ve bu cevabın neden önceki cevaplardan daha iyi olduğunu ya da ne yaptığınızı tam olarak ne yaptığınızı açıklar mısınız? Yalnızca kod yanıtları genellikle bir tür açıklama yapılmaksızın kaşlarını çatar.
Howdy_McGee

bu kod anahtarı wp-login.php login.php benim bootstrap dayalı benim özel kodu ile Bu otomatik bot önleyebilir veya varsayılan url tahmin edebilir. kullanın, istediğinizi ifade etmek için <i> giriş </i> 'i değiştirebilir. ve kimse sizi doğrudan giriş URL'sini bilmiyor.
Rei
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.