Digest認証とWordPressに自動ログイン

フォーラムの方に「中国や韓国からwp-adminディレクトリのファイルにリクエストが来まくってる」というトピックがたっていたので、
Apacheログをみたところ中国から43件wp-adminのファイルへアクセスがあったことを確認。

被害はないが管理用ページにアクセスされるのは気持ちが良くないので、こちらもアクセス制限をしてみましt

認証用の.htaccessに記入するコードは以下の通り

wp-config.phpがあるディレクトリの.htaccess
----------------------------------------
<Files wp-login.php>
	AuthType Digest
	AuthName "REIMA's BLOG"
	AuthUserFile ......
	require valid-user
</Files>


wp-adminディレクトリの.htaccess
----------------------------------------
AuthType Digest
AuthName "REIMA's BLOG"
AuthUserFile ......
require valid-user

<Files admin-ajax.php>
	Order allow,deny
	Allow from all
	Satisfy any
</Files>

この2つの.htaccess内に記入したAuthNameは揃えるようにしてください。
サーバー側のconfに記入できる場合は<Directory>でディレクトリを指定すれば.htaccessを作成しなくてもいいので楽ですね。

これだけでも効力を発揮したのですが、Digest認証後表示されるWordpressのログイン画面にもIDとパスをいれないといけない・・
だるかったので、プラグインで自動ログインするようにしてみました(`・ω・)b

 
自動ログインするには、新にこのようなプラグインを作成。
$httpAuth_autoLogin_httpUserはDigest認証で使うユーザ名を、$httpAuth_autoLogin_wpUserは自動ログインするWordpressのユーザ名を記入

<?php
/*
Plugin Name: WP Auto Login
Description: HTTP認証に成功した場合、自動でWordPressへログインするプラグインです。
Version: 1.0.1
Author: REIMA
Author URI: http://blog.wolfs.jp/
*/
 
// Digest認証に使用するユーザー名
$httpAuth_autoLogin_httpUser    = "HTTP UserName";
 
// WordPressにログインするユーザー名
$httpAuth_autoLogin_wpUser    = "WordPress UserName";
 
function wp_httpAuth_autoLogin() {
    global $httpAuth_autoLogin_httpUser, $httpAuth_autoLogin_wpUser;
 
    $redirectFlg = false;
    if (is_user_logged_in()) {
        $redirectFlg = true;
    } else if (!$_REQUEST['loggedout'] == 'true' && $_SERVER['REMOTE_USER'] == $httpAuth_autoLogin_httpUser){
        $wp_user = get_userdatabylogin($httpAuth_autoLogin_wpUser);
        $wp_userID = $wp_user->ID;
 
        wp_set_current_user($wp_userID, $httpAuth_autoLogin_wpUser);
        wp_set_auth_cookie($wp_userID);
        do_action('wp-login', $httpAuth_autoLogin_wpUser);
 
        $redirectFlg = true;
    }
 
    if ($redirectFlg) {
        $redirect_to = $_REQUEST['redirect_to'];
        if (!$redirect_to) {
            $redirect_to = admin_url();
        }
        wp_safe_redirect($redirect_to);
    }
}
 
add_action('login_form', 'wp_httpAuth_autoLogin');
 
?>

このソースはWordPress Auto-Login | Leon's Weblogを参考にしました。

このPHPの動作は、wp-login.phpにアクセスしたときに呼び出されます。

呼び出される時にはDigest認証に成功していると思うので、REMOTE_USERの値が$httpAuth_autoLogin_httpUserで指定されている物と同じ場合、$httpAuth_autoLogin_wpUserで指定されているユーザー名でWordpressにログインし管理画面を表示。

って感じ短いので直ぐにわかりますねw

これで、Digest認証でwp-login.phpとwp-adminディレクトリを保護しつつ、自動でWordpressログイン出来るようになりました・w・
( -_-)旦~ フゥ...

 
2012/07/14 追記
 色々と抜け等があったのを修正。

関連するかもしれない記事



トラックバックURL


スパム対策のためトラックバックURLを動的に生成しています。
生成されるトラックバックURLはコンテンツURLと紐付けされますので、コンテンツURLで指定したサイト以外では使用できませんのでご注意ください。
トラックバックの注意事項などの詳しい説明は About ページを閲覧してください。
「コンテンツURL」を入力し「URL生成」ボタンを押してください。
トラックバックを送る際はあなたの記事やコンテンツにこの記事のURLを書くかリンクしておいてください。
URLがない場合はスパムとして削除され以降の全トラックバックは拒否されます。
  • コメント
  • ピンバック/トラックバック
  1. 1205
    comment
    0
    0
    takoyakiID: a9uOs6PIrnPTs
    2012/07/27 (金曜日) 02:21:12返信

    こんにちは、
    この方法参考にさせて頂いてやってたのに、サーバー変えたら急に上手く行かなくなってしまいました。
    Warning: Cannot modify header information - headers already sent by (output started at /home/heart-c/public_html/portal/wp-login.php:60) in /home/heart-c/public_html/portal/wp-includes/pluggable.php on line 690
    とか出て、setcookieをする時に出力済みだからダメって怒られます。
    何か設定かなぁ・・・

    • 1206
      comment
      0
      0
      れいまID: -
      2012/07/27 (金曜日) 17:40:31

      ご利用ありがとうございます。

      こちらの環境では全く再現しませんでした。
      エラーメッセージからするとheaderの前にレスポンス内容が出力されているのでエラーとなっているようですね。

      今考えられる原因はこんな所でしょうか・・・
      ・こちらで公開しているコードをphpとして保存する際に <?php の前や ?> の後に何らかのゴミが入っていてそれが出力されている。
       主に、<?php の前に入るゴミは、UTF-8で保存する際にエディタが追加するBOMです。
       (これはUTF-8で保存されている他のphpでも当てはまります。)
      ・他のプラグイン等で出力されている。
      ・サーバーの設定等の問題。

      プラグインのコードが同じなら、サーバー側のphp等の設定が怪しいかもですね。
      その辺はサーバーを変える前と後のphpの設定を比べて、違いを洗い出すぐらいでしょうか・・

  2. 1203
    comment
    0
    0
    通りすがりID: 6b9KlopuYJRBY
    2012/07/14 (土曜日) 14:20:38返信

    古い記事に失礼します。
    記載されている方法ではwp-adminを正常に保護できません。
    別の方法でやる必要があります。

    • 1204
      comment
      0
      0
      れいまID: -
      2012/07/14 (土曜日) 18:08:02

      私も随分前にこれに気付き修正したのを思い出しました。
      こちらを修正するのを忘れていたようです・・・

      .htaccessの記載をかえて適切に認証がかかるように修正し、プラグインの方も一部修正しました。
      ご指摘ありがとうございました。

  3. 651
    comment
    0
    0
    KeitaID: 83/HN18eB7xGQ
    2009/06/05 (金曜日) 04:06:56返信

    おつかれさまでs
    adminこられるのは気持ちよくないですね・・・入れないにしても。
    こういうのみるとWPでやりたくなるw
    お名前(ryキャンペーン中だし取ろうかなと考え中だったり。
    ドメイン名考えてください\(^o^)/

    • 652
      comment
      0
      0
      れいまID: -
      2009/06/05 (金曜日) 09:26:33

      ほんと、どこにアクセスしてるんだよ!と言ってやりたい(((((

      やっぱり自分でプラグイン作ったり思いっきりカスタマイズできるのがいいし
      うまく動いたときはうれしいものです(*´ー`)

      ドメイン安くなってるにゃあ・・永遠割りいいにゃあ・・・
      恵雫.jp登録可能みたいだしw
      これでっ!(


コメントを残す

メールアドレスは公開されません、また は必須項目です。
このブログに初めてコメントする方は こちら をご覧ください。


画像認証は待機中です、先にコメント本文を入力して下さい。

コメントを送信しています、しばらくお待ち下さい...
(Akismetスパムデータベース及びブラックリストへの照会を行っています)


キャンセルをした場合でもコメント投稿が完了している場合があります