WP-login.php 비활성화 또는 리디렉션


10

로그인 여부에 관계없이 방문자가 도달하지 못하도록하는 방법이 mysite.com/wp-login.php있습니까?

필요한 로그인 양식이 따로 있습니다. 에 의해 생성 된 양식의 스타일을 다시 지정할 수는 wp-login있지만 처리 할 필요는 없습니다. 다양한 필터와 후크를 시도했지만 리디렉션 할 수없는 것 같습니다. 또한 .htaccess리디렉션을 사용해 보았지만 이것이 작동한다는 것을 알았지 만 사용자 정의 로그인 / 로그 아웃 양식이 작동하지 않습니다.

아이디어?


보안상의 이유로이 작업을 수행하고 있습니까? 왜 wp-login.php에 대해서만 인증을 구현하지 않습니까?
Gaia

그게 무슨 뜻인지 모르겠어요 조금 펼치십시오. 티아.
jchwebdev

왜 별도의 로그인 양식이 필요합니까? 보안상의 이유로?
Gaia

요즘 너무 많은 사람들이 'wp-login'을 알고 있습니다. 오히려 그렇게 분명하지는 않을 것입니다. '인증을 구현하지 않는 이유'가 무엇을 의미하는지 말씀해 주시겠습니까? TIA
jchwebdev

제공된 답변을 참조하십시오.
Gaia

답변:


19

이 질문을 찾고 몇 가지 답변을 테스트 한 후 아래는 프로덕션 환경에서 사용중인 "정리 된"버전입니다.

이 버전은 알림 / 오류를 발생시키지 않으며 암호 재설정이 작동하도록 허용합니다.

// 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();
    }
}

이것은 WP-Login (양호)을 막는 것처럼 보이지만 최종 exit ()는 실제 login ()이 우리가 원하지 않는 것에서 발생하는 것을 막는 것 같습니다. 우리는 사람들이 로그인 할 수 있기를 원하며 WP 로그인 화면을 보지 마십시오. 잘못된 PW를 입력하면 사용자 정의 로그인 페이지로 리디렉션되어야합니다.
jchwebdev

그것을 편집 & 지금 작동 : in_array ()를 수행하기 전에 $ action이 채워져 있는지 확인해야합니다
simonthesorcerer

이것은 나를 위해 작동하지 않았습니다. 여전히 로그인 할 수 있습니다.
Mike

@Mike-후크가 제대로 작동하는지 확인 하시겠습니까? echo "HERE";함수 안에 넣으면 어떻게됩니까 ? 에코합니까?
random_user_name 14

1
@cale_b 예, 훅이 제대로 작동합니다. 문제는 $_GET['action']저에게 비어 있다는 것입니다. 양식은 /wp-login.php(URL에 GET 변수없이 ) 게시되고 소스를 보면 put이라는 이름이 없으므로 소스 action$_REQUEST['action']비어 있습니다.
Mike

10

테마의 기능에서 이것을 시도하십시오.

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();
 }
}

나를 위해 일하지만 문제를 로그 아웃하고 왜 알아낼 수 없습니다
Androliyah

7
wp-login.php는 로그 아웃도 처리하기 때문입니다.
Brian Fegter

예, 이로 인해 사용자 정의 로그인 양식이 차단됩니다. 그러나 요청 var 또는 아마도 referer를 안정적으로 확인하는 방법이 있다면? IOW : 시작점이 될 수 있습니다. 다른 누군가? TIA --- JC
jchwebdev

예, wp-login은 로그 아웃을 처리합니다. 롤 논리적입니다. 아마도 플러그인이있는이 코드로 충분할 것입니다. 내가 wp-login을 사용하는 것을 싫어하기 때문에 우리가 사용할 수있는 다른 것을 보자.
Androliyah

wp-login 이로 드 될 때 요청 변수를 모니터링하는 것이 필요하다고 생각합니다. 지금은 할 수있는 기계가 없습니다.
jchwebdev

4

로그 아웃 조치에 GET var를 추가하면 제대로 작동합니다.

add_action('init','custom_login');

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

지금까지 이것은 우리가 원하는 것에 가장 가깝습니다. exit ()를 제거하고 wp_redirect를 사용자 정의 로그인 페이지로 변경하면 작업을 수행하는 것 같습니다.
jchwebdev

3

나는 꽤 오랫동안 WordPress 플러그인 Rename wp-login.php 를 사용하고 있습니다.

wp-login.php다른 경로로 전환 할 수 있습니다 . 봇이 로그인 페이지를 때려 눕히고 이제는 히트 수가 0입니다.


1

WP- 로그인은 로그인, 로그 아웃, 등록, 비밀번호 재설정 및 검색을 처리합니다. 프론트 엔드 로그인 페이지를 변경한다고 가정하십시오. 다음 코드를 안전하게 사용할 수 있습니다.

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');
}

이 코드 스 니펫은 다음을 수행합니다.

  1. 모든 웹 사이트 방문자를 새 로그인 페이지로 리디렉션하십시오.
  2. 로그 아웃은 아무 문제없이 작동합니다
  3. 사용자 정의 로그인 페이지에서 사용자 정의 로그인, 등록 및 비밀번호 재설정 양식을 작성해야하지만, 사용자 요청 양식은 게시 요청이 리디렉션되지 않으므로 wp-login.php에 데이터를 안전하게 게시 할 수 있습니다.

1
home_url()이미 슬래시를 추가하므로 필요하지 않습니다. 또한 $pagenow(a) 관리자에게만 존재하는 전역 (그리고 아마도 로그인)과 (b) get_current_screen()속성 확인 으로 대체되어야 합니다.
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);
}

불쾌한 wp-login 양식 대신 / login으로 리디렉션됩니다.


흠 흥미로운 아이디어,하지만 설명해주십시오 방법 / 작동하는 이유
마크 Kaplun

작동하지 않습니다. 이것은 login_url ()을 통해 로그인 URL에 대한 요청을 필터링하며, 누군가가 wp-login.php를 수동으로 입력하는 것을 막지 않습니다.
Matt

0

wp-login.php모르는 사람을 보지 못하도록 보호하려는 의도라면 가장 간단한 방법은 액세스 권한 (기본 인증)을 요구하는 것 wp-login.php입니다.

에서 아파치, 인증은 htaccess로의 조합과 암호 파일을 통해 구현됩니다 . 처음으로 브라우저 세션 내에서 누구나 액세스하려고 wp-login.php하면 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다 (워드 프레스 로그인 전에).

작업을 단순화하기 위해이 사용자 이름과 비밀번호는 액세스 권한을 부여하려는 모든 사람에게 동일 할 수 있습니다 wp-login.php. 처음 인증 대화 상자를 통과 한 후에도 여전히 워드 프레스 로그인을 입력해야하기 때문입니다.


흥미 롭군 '프롬프트'가 자격 증명을 입력하기위한 브라우저의 모달 팝업이라고 가정합니다. 혼란 스러울 수 있다고 생각합니다. 이상적으로 내가 원하는 것은 해당 URL이 -nothing -...하거나 홈페이지로 리디렉션하는 것입니다. 하지만 고마워 매일 새로운 것을 배우십시오!
jchwebdev

당신이 생각하는 것은 "불분명 한 보안"입니다. 그러나 실제로는 모호한 일만하고 있습니다. 사용하지 마십시오. 인증은 보안입니다. 진입 점을 숨기는 것은 모호합니다. security.stackexchange.com/questions/32064/…
Gaia

1
다시 말해, wp-login의 위치를 ​​변경하더라도 auth를 사용해야합니다. "연결을 안전하게 유지하기 위해 서버를 22에서 포트 2222로 변경해야합니까? 절대 그렇지 않습니다. 비밀번호를 사용하는 동안 SSH 서버를 포트 2222로 연결 하시겠습니까? 아니오, 이것이 가장 좋은 해결책이라면, 포트를 변경 ( "불분명")하면 일반 포트를 검색하는 자동 익스플로잇 스캐너가 줄어 듭니다. 모호함은 좋지만, 모호함을 고려하지 않고 있습니다. 발견 한 경우 여전히 암호를 해독해야합니다. "
Gaia

고마워 나는 많이 배웠다. 내가 찾던 것이 아니라 여전히 ... 매우 도움이되었습니다. 최고 --- JC
jchwebdev

0

$pageid사용자를 리디렉션 할 페이지로 교체

/* 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 } ?>

내 사용자 정의 로그인 페이지 예 login.php 저장 및 코드 입력

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();
 }
}

functions.php


질문을 편집하고이 답변이 이전 답변보다 더 나은 이유 또는 정확히 현재하고있는 일을 설명해 주시겠습니까? 코드 만 답은 일반적으로 어떤 설명도없이 찌푸립니다.
Howdy_McGee

이 코드는 부트 스트랩을 기반으로 내 사용자 정의 코드를 사용하여 wp-login.php를 login.php로 전환합니다. 자동 봇을 방지하거나 기본 URL을 추측 할 수 있습니다. 를 사용하면 <i> 로그인 </ i>을 변경하여 원하는 것을 문구로 바꿀 수 있습니다.
레이
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.