ご覧のページは 4 / 6 です。先頭ページはこちら。
Step4. REST APIからユーザー情報を取ろうとする。
1.857 - create 159.242.234.106 - - [17/Apr/2021:06:23:12 +0900] "GET //wp-json/wp/v2/users/ HTTP/1.1" 401 198 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4240.193 Safari/537.36" "-"
このリクエストはREST APIを使ってユーザー一覧を取得するものです。自分のサイトでこのリクエストを送信してみてください。
ブラウザからURL入力するだけでOK。すると、すべてのユーザーのパスワード以外のすべての情報が取得できます。危険。
(内容はお見せしません。自分で確認してください。)
REST API (Representational State Transfer API)
URLを指定すると常に同じ結果を返すAPI。
URLはユニークで、決まった処理のリクエストになるので、シンプルでわかりやすいのが特長。
処理を受けるサーバーも、URLを見れば何をすれば分かるのでシンプルで実装しやすい。
結果は、HTML, XML, JSONなどで返す。
最近のWebサービスで提供されるAPIはREST APIが多い。
Facebook, Twitterなどもそう。また、ECサイトと在庫管理などのWebサービスと連携するときにもREST APIを使う。
Webサービスでは情報取得、情報の追加・更新・削除などのAPIが提供されるが、その説明にURLを指定するものはREST APIであることが多い。
もうひとつ、セッションを使わないのが特長。
セッションを使わずに1リクエストで処理が完結するため、アクセス数やリクエスト数の多いサイトに適している。(SNSなど)
セッションハイジャックがないので、情報漏えいや不正なリクエストも防ぐことができる。
REST APIを無効化するのもひとつの手なんですが、それだと投稿編集(Gutenberg)でカスタム投稿タイプ・カスタムタクソノミーが使えなくなるのでかなり痛い。
これもさっきのWordfence Securityをインストールするだけで解決できます。
さっきのREST APIリクエストをもう一度してみてください。レスポンスのJSONデータのステータスで『Unauthorized (401)』(認証の未承認)が返り、ユーザー情報は表示されません。
WordPress.org
wp-json ってなんだ?
WordPressでは、REST APIを実装する機能が用意されていて、自分のサイトにどれくらいのAPIが実装されているか確認できます。
https://(your domain)/wp-json/
URLに "wp-json" がついているのは、REST APIのレスポンスをjson形式に変換しているから。このjson形式に変換するのも一つの機能で、ajaxでも使われます。
WordPressのREST APIではインタフェースのjsonラッパーだと思って下さい。
REST API リクエスト
↓
WPが処理を実行してデータ作成
↓
WPがデータをjson形式に変換
↓
Webサーバーがデータ(レスポンス)を返す。
REST APIには認証なしでも情報取得できるものがある
ここからが大事なところで、WordPressのREST APIでは認証なしでもたくさんの情報が取れます。REST APIだけでもうひとつ同じサイトが作れるほど。やろうと思えば丸パクりサイトさえ作れます。
(これはこれで便利。もともとサイトで公開されている情報なので問題はない。)
それに加えプラグインが独自のREST APIを追加しているので、ひとつひとつのセキュリティチェックをするのには根気がいる。
既存機能を損ねる可能性もあるので安易に無効化することもできません。
WordPressはver5になってから、編集画面が大きく変わり便利になりました。
Gutenbergを採用したから。GutenbergはREST APIを多用しています。
REST APIを無効化すると、カテゴリやタグの項目が出なくなったり、URL入力の検索機能が効かなくなったり、SNSの埋め込みができなくなったりします。
というか、ただのエディタになってしまいGutenbergを活かしきれない。
このあたりもセキュリティプラグインはチェックしてくれます。さっきのWordfenceもそう。Wordfenceは既存機能を維持したまま、セキュリティ上危険なREST APIを無効化します。
さっきのユーザー一覧取得のREST APIがその例。
- P1 不正アクセスを試されたログ
- P2 Step2. ブログ編集ツールの設定情報へのアクセス
- P3 Step3. WordPressのログインユーザー名を取ろうとする。
- P4 Step4. REST APIからユーザー情報を取ろうとする。
- P5 Step5. oEmbedから情報を取ろうとする。
- P6 Step6. xmlrpcからブルートフォースアタック。