緊急!!WordPressの仕様変更に伴う修正

事象

4月30日、WordPressを5.4.1にアップデートしたら、記事がアーカイブリストとして表示され、開かなくなってしまいました。

原因

このブログの記事のパーマリンク(URL)は

https://blog.zeke.ne.jp/年/月/日/時分秒.html

としていました。

ところが、WordPress 5.4.1からこの形式は利用不可になりました。

Certain private posts can be viewed by unauthenticated users
This changeset had the following comment: “Query: Ensure that only a single post can be returned on date/time based queries.”
This indicates that it was possible for an attacker to view private posts by using date and time-based queries, though only for protected posts that were created or updated at the exact same time, down to the second, as an unprotected post. The diff in question is:
https://core.trac.wordpress.org/changeset/47635/
This was discovered by ka1n4t and appears to be similar to CVE-2019-17671, where multiple posts are returned from a query, and only the first post is checked to ensure that it should be publicly visible.

https://www.wordfence.com/blog/2020/04/unpacking-the-7-vulnerabilities-fixed-in-todays-wordpress-5-4-1-security-update/

要約すると、「時分秒」のURLを使うと、非公開ページが意図せず第三者に見られてしまうことがあるので使えなくした、ということです。

対処

いきなり、ブログのページが見れなくなってしまっているので、早急に対処をしなければいけません。

対処にあたっては、こちらのページを参考にさせていただきました!

とりあえず、バックアップを取ってからバージョンダウン

サーバ上ではWordPressは/var/www/wordpress/配下にあるので、

# cd /var/www/
# cp -pr wordpress wordpress.orig

と、バックアップを取ります。

バージョンダウンを手動で行ってみたのですが、便利な便利なWordPressの自動パージョンアップ機能によって、もとに戻されてしまいました。そのため

こちらの記事を参考に、プラグイン「WP Downgrade Specific Core Version」を使って、5.4にバージョンダウンしました。

リダイレクト用データの用意

新しいパーマリンクは

https://blog.zeke.ne.jp/年/月/日/post-id/

にすることにしました。post-idとは記事固有の番号です。

パーマリンクを変更すると、変更前のリンクは「404 Not Found」になってしまいます。

自分がSNSにアップしたリンクやGoogleの検索結果が無効になるのは超悲しいので、古いリンクはリダイレクトで新しいリンクに飛ばすようにします。

今の記事数は785個あります。手動で変更するのはやってられないので、リストを作成します。手順は

  1. 「ツール」→「エクスポート」から今までの投稿を、全てエクスポートする。
  2. エクスポートデータから、
  3. タブ、タブ、<link>で始まる行を抽出する。これが古いリンク一覧になる。
  4. タブ、タブ、<wp:post_id>で始まる行を抽出する。これがpost-id一覧になる。
  5. この2つをエクセルなんかに貼り付けて、整形して…
  6. /年/月/日/時分秒.html , https://blog.zeke.ne.jp/年/月/日/post-id/ の形式のCSVファイルが完成。

てな感じです。

リダイレクトの設定とパーマリンクの変更

リダイレクトは「Redirection」プラグインを使いました。

こちらの記事を参考に、設定を行い、用意していたCSVファイルを食わせました。

次に、パーマリンクの変更です。

「設定」→「パーマリンク設定」で

/%year%/%monthnum%/%day%/%hour%%minute%%second%.html

/%year%/%monthnum%/%day%/%post_id%/

に変更します。

変更後、googleで自分のブログを検索し、リダイレクトが効いていることを確認します。

とりあえず、バージョンアップしておく

忘れないうちにバージョンアップしておきます。

プラグイン「WP Downgrade Specific Core Version」の設定で5.4.1に変更してバージョンアップしてから、このプラグインを無効化→削除しました。

バージョンアップの途中で、「重大なエラーがおきました」ってメッセージが出たので、プラグインを削除してから、再インストールしておきました。
まぁ、なんとか動いてるので良し。

内部リンクをちまちま直す

記事中に自分の他の記事にリンクを張っている「内部リンク」も新しいリンクに変更しなくてはいけません。

自分は古いですが「Search Regex」プラグインつかって、「https://blog.zeke.jp/*.html」と内部リンクを検索、該当する記事を開いて一つづつ手で修正しました。

リダイレクトが効いているので、古いURLをブラウザで開けば新しいURLを表示してくれます。

それを記事にコピペしました。

結局90ヶ所直しました。思ったより少なくてよかった。

ログを見て気がついたところを直す

「Redirection」プラグインでは404エラーのログを吐いてくれます。

リンクエラーは「Broken Link Checker」プラグインでチェックしていましたが、それ以外の細かいエラーまで表示されます。

エラーが出てるとついつい直してしまいますね。

こちらも100ヶ所以上あたので、結構時間を取られました。

以上で終了です。なんとか1日で終わってよかったです。

Kindle Unlimited入会で無料で読めます!

コメント