編集者用のツールなどを作成した際に、一般ユーザーには使わせたくなくて管理者(編集者)だけに使わせたいみたいなことってあると思います。
そんなとき、作法としてはwp-adminにおけばよいみたいなんですが、ただそのまま置くだけだとwp-adminなのに誰でもアクセス可能みたいな感じになってしまいます。
なのでちょっとコードを追加したりしなくてはいけなくて、その辺の話をします。
WordPressにログインしてる人限定のツールを置きたいとは?
記事を変換したりするツールだと、入力がHTMLそのままとかになることがありますね。
すると入力でHTMLタグをエスケープとかしづらくて、これを一般に見える位置に出すのはあぶねえなぁと思います。
じゃあどうすんべってところで、IPアドレスで絞るとかは王道ですが、それはそれで編集者全員にIP出せはちょっとめんどい。
となればログインしてるかどうかで権限を判定して、ログインしてない人は弾く!みたいな感じができると良さそう。
というところで、そのための処理がWordPressにはあります。
なのでそれを使おう!という話。をこれからやります。
「/../wp-load.php」で判定を行い、ダメならwp_dieでスレッドをキルする
以下のような処理を書くことで、wp-adminに置かれたwordpressファイルと同程度のセキュリティを発揮できます。
<?php
// WordPress の環境を読み込む(wp-admin 内なら、wp-load.php は1階層上にあります)
require_once( dirname(FILE) . '/../wp-load.php' );
if ( ! is_user_logged_in() ) {
wp_die( 'ログインしてください。' );
}
つまり、これを書いた状態なら、ログインしてないユーザーはファイルにアクセスできず、エラー画面が表示されます。(このwp-loadがログイン状態をみる感じのファイルなので、これをみて判定するとwprdpressのwp-adminの仲間に加われます。)
ちなみにこれを書かずに置いた場合は、「wp-admin/xxx.php」とかでもログインしてないユーザーがアクセス可能でした。むしろめっちゃセキュリティ下がってますね。
で、そのあとのwp_dieってやつは名前怖いんだけど、wordpressのエラーメッセージスタイルを出す感じのやつで、推奨される方法らしい。


これを使うと、確かによくみる感じのwordpressエラー画面が出た。(ログインしていない場合)
終わりに
この方法でwp-adminにおけば管理者用ツールがいけるっぽいですね。
汎用性が高そうなのでぜひ覚えておきたい。

コメント