今回も備忘録です。(こいついっつも備忘録書いてんな)
前回書いた記事の続きみたいな感じです。
前回は「ソースにログインユーザ名(author)が表示されちゃうからなんとかせんと」って記事でした。
今回は、「WP REST API」を使えばログインユーザ名なんて簡単に調べられちゃうよね、危ないよねって話です。
そもそも「WP REST API」とは?
そもそも「WP REST API」とは、「外部からhttp通信でデータを取得・送信できる仕組み」です。
要するに、管理画面にログインしなくてもPythonのプログラムとかで記事投稿したり、逆に情報を引っ張ったりできる仕組みです。
あら便利。
ただ便利な分気を付けないといけまへんねん。
いや、そもそもREST APIなんて使ってねぇよ
って人も多いと思いますが、どうやら最新版のWordPressでは、システム自体がREST APIに依存しているようで、REST APIを無効にしたりするのは非推奨のようです。
つまり、この記事で紹介する設定はみんなやっておいた方が良いということです。
本題
で、表題の件ですが、REST APIを使えば記事の情報やカテゴリ情報など色々な情報を引っ張ってこれるのですが、「https://sample.com/wp-json/wp/v2/users」にアクセスすることで、ログインユーザーの情報も引っ張ってこれるのです。
(ドメイン部分はご自身のサイトのものに変更して下さい)
以下のような情報が出てきます、その「slug」の部分にログインIDがガッツリ表示されています。
(また黒塗りばっかりで見にくくてスミマセン。。)
あかんやん!!
対策
この情報が表示されないように、functions.phpに以下を追記していきます。
なお以下のコードはコピペで動作しますが、functions.phpを編集する際は必ずバックアップを取って下さい!
万が一「全角スペースが入っていた」とかしょうもない理由で、サイト自体にアクセス出来なくなったりしますので。
add_filter('rest_endpoints', function ($endpoints) { if ( isset( $endpoints['/wp/v2/users'] ) ) { unset( $endpoints['/wp/v2/users'] ); } if ( isset( $endpoints['/wp/v2/users/(?P[\d]+)'] ) ) { unset( $endpoints['/wp/v2/users/(?P[\d]+)'] ); } return $endpoints; });
これで、さっきと同じURLにアクセスすると、以下のようになっています。
ワーオ、安心~!
今回は以下のサイト様を大いに参考にさせて頂きました。
文面やサイトデザインから判断して、多分筆者の方は高身長イケメンです。
https://www.doe.co.jp/hp-tips/wordpress-login-id-guard/
ちなみに、ログインユーザIDを守ろうと思うと、上記に加えて「投稿者アーカイブ」を無効にしたり、リダイレクト設定等の対策も必要になります。
ただ私は投稿者アーカイブなんて使ったことないので、全然意識したことはありませんが・・・。
投稿者アーカイブを使っている方は、先程の参考サイトに詳しく書いてくれているので要チェック!(他力本願)
WordPressをガチでセキュリティ対策しようと思うと本当に大変。。。