それはセキュリティのもう一つの層になることができます..
Login_headにフックすることであなたの関数からwp-loginページを無効にすることができます。
add_action( 'login_head', 'wp_die');
(これは明らかに非常にぎこちないやり方ですが、だれかがそのページからログインできないようにします。ただのダイではなく、リダイレクト機能や警告メッセージを作成することもできます。)
そして、既存のwp-loginファイルを別の場所にコピーして、一番上の近くのwp-load.php
への相対パス(およびそれ自体へのリンクとフォームアクションを含む他の相対パス)を必ず更新してください。
(もちろん、ここでlogin_head
に追加したアクションを削除する必要があります。そうしないと、このページからログインできなくなります。)
それから、あなたは新しいログインページのアドレスを返すフィルタをlogin_url
に追加する必要があるだけでなければ、そうでなければwp-adminファイルを要求している人々は古いログインページにリダイレクトされるでしょう。
Wp-loginまたはwp-adminページ自体はセキュリティ上の脅威を引き起こさないため、これはセキュリティ上の大きな考えではありません。だれかがあなたのパスワード/ユーザ名を持っていると彼らはどこにログインするべきかを見つけることができないかもしれない、それ故にあいまいさによる安全性を主張することができます。
Kronusがあなたがたぶん気の利いたリダイレクトにすることができると言ったように、それが将来のリリースでどれほどうまくスケールアップするか、あるいはそれがトラブルに見合う価値があるかどうかわからない。
私はあなたのログインのためのいくつかの良いアイデアを提案するでしょう。
Login/admin(htpps)に対してsslを有効にします。
.htaccessを使用してページをパスワードで保護します(したがって、二重ログインになります)。
ログイン失敗回数制限などのプラグインを使用します。これはログイン失敗後にユーザーをロックアウトします。
これらの答えのどれも特に役に立ちませんでした。私はOPの動機に疑問を呈しますが、ここにそれを行う方法があります。これを自分のfunctions.phpに追加してください。ただし、 "$ login_page_id"は必ず置き換えてください。
// This will redirect the actual login page to your new page
add_action( 'login_redirect', 'custom_login_redirect' );
function custom_login_redirect()
{
if ( 'wp-login.php' == $GLOBALS['pagenow'] )
{
// Set your $login_page_id
wp_redirect( get_permalink($login_page_id) );
die;
}
}
// This will replace the login url used by Wordpress
add_filter( 'login_url', 'custom_login_url', 10, 2 );
public function custom_login_url( $login_url='', $redirect='' )
{
// Set your $login_page_id
return get_permalink($login_page_id);
}
あなたの新しいログインページで、あなたは単にログインフォームを表示するためにこの関数を追加することができます:
<?php wp_login_form(); ?>
私はここに挙げた答えの大部分に憤慨しています。 OPは有効な質問を投稿し、与えられた回答のほとんどは、この問題に対するWordpressの制限を回避する方法がないという事実を回避するためのものでした。
OP、この問題に関してあなたができる最も良いことはIPフィルタリングであり、WP-Admin領域へのログインを許可されているネットワークのみを許可します(例えばあなたのオフィスのIPアドレス、開発者のIPアドレスなど)。とにかくスターバックスであなたの仕事をしてはいけません。これが企業ネットワークのやり方なので、あなたも同じことをするかもしれません。
## .htaccess inside the wp-admin folder
order deny,allow
deny from all
allow from xxx.xxx.xxx
allow from xxx.xxx.xxx
allow from xxx.xxx.xxx
/login/
書き換えルールのみを使用して、Wordpressログインを/wp-admin/
、/wp-login.php
または/cms
から.htaccess
に移動するための解決策を思いつきました。
プラグインは不要です。
これをプロジェクトのルートの.htaccessファイルに貼り付けます。
<IfModule mod_rewrite.c>
# Move login to /cms.
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$
RewriteCond %{HTTP_REFERER} !/cms(.*)$
RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^(.*) ./cms?message=wrong_login_path [R=302,L]
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$
RewriteCond %{QUERY_STRING} !^cms=unlocked
RewriteCond %{REQUEST_METHOD} !POST
RewriteRule ^(.*) ./cms?message=redirect_to_custom_login_path [R=302,L]
RewriteRule ^cms wp-login.php?cms=unlocked [L]
</IfModule>
乾杯!
更新: /いくつかのルールを改善しましたので/wp-login.phpへのPOST
リクエストでも403 forbidden error
をトリガーします。これは、ブルートフォース方式を使用してダッシュボードにログインしようとしているボットに対して役立ちます。これらの規則に何か改善があれば、この投稿にコメントしてください。
サブディレクトリに新しいログインページを作成するだけです。既存のwp-loginページをあなたのウェブルートの新しいディレクトリ(たぶん "/ login")にコピーし、それをindex.phpに改名し、WordPressブートストラップをページの一番上に追加し、そしてあなたがそれを好きなようにする).
ログインページのデフォルトコードを少し調整する必要があります。ほとんどの場合、ハードコードされたリンクを検索/置換して "wp-login.php"にリダイレクトします。しかし、すべてのフックとフィルタをそのままにしておけば、この方法ではプラグインの統合が混乱することはありません。 WordPressのコアアップデートは、wp-loginページ自体への変更が含まれていない限り、問題ありません(マイナーバージョンではめったに起こりません)。
この方法でユーザーアカウントページを作成することもできます(私はそれらを "/ profile"ディレクトリに置きます)。それが済んだら、加入者レベルのユーザはwp-adminに入る必要がないはずなので、htaccessファイルでそれを保護することができます。これは実際にあなたが探していた付加的なセキュリティをあなたに与える部分です。フロントエンドで使用されているプラグインもあるので、admin-ajaxファイルのためにあなたのhtaccesで例外を作るようにしてください。
プラグインのみの解決策を見つけようとしていないのは確かです。しかし、もしそうなら、私たちに知らせてください!
この質問が出てきた5年間、誰も中心的な問題に取り組んでいませんでした:セキュリティは、自動ボットを追い払ってログをクリーンに保つvalidテクニックです。wp-admin
の移動/非表示の目標は、ボットに対してWordPressサイトではないnotであるように見せることです。
wp-admin
を非表示にする(移動はしない)方法は、ボットがそのURLにアクセスしようとしたときに標準の404ページを提示することです。自宅のIPアドレスからのみアクセスすると、wp-admin
ページが適切に返されます。 このメソッドはwp-admin
が存在しないかのように攻撃者/ボットに見えますが、wp-admin
パスをハードコードするコアWPコードまたはプラグインを壊しません。この.htaccess
コードは証書:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^12\.34\.56\.78$
RewriteRule ^/?wp-admin - [R=404,L]
もちろん、コードを使用するときは、12.34.56.78
を 独自のIPアドレス に置き換えてください。 IPアドレスは正規表現として解釈されるため、.
文字をエスケープすることを忘れないでください。
あなたは.htaccess
を編集してあなたの都合の良い別のパスへのリダイレクトを実行することができます。
このプラグインを使うことができます:
http://wordpress.org/extend/plugins/wp-login/ /
あなたはただページを作成し、ログインがどこにあるかをプラグインに伝えることができます。しかし基本的にはwp-login.phpをあなたの "page"にリダイレクトするだけです。そのため、wp-login.phpを検索しているボットは、単にあなたの "ページ"にリダイレクトされます。
ボットからあなたのログインページを保護するために、あなたはクッキーと.htaccessの組み合わせを使うべきです。ほとんどのボットはクッキーを使わないからです。このようなもの:
RewriteCond %{HTTP_COOKIE} !^PHPSESSID=\w+ [OR]
RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?example\.com/ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule ^wp-(comments-post|login|register)\.php http://example\.com [R=301,L,NS]
上記の例では、PHP Session Cookieを使用しています。実装が最も簡単だからです。
ログアウトURLを(管理者で)変更するには、functions.phpを編集してください。
add_filter( 'logout_url', 'custom_logout_url');
function custom_logout_url( $login_url)
{
$url = str_replace( 'wp-login', 'your_logout_file', $login_url );
return $url;
}
この回答はdotancohenへの追加です。 dotancohenの答えはwp-login.php
を説明していません、あなたがWordPressをあいまいにしようとしているならあなたは考慮すべきです。
これがwp-admin
とwp-login.php
の両方にあなたがどのように404するかです:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^12\.34\.56\.78$
RewriteCond %{THE_REQUEST} \ /+wp-(admin|login)