Blogの公式キャラクター「パンD」です。WordPressの更新ボタンをクリックすると403エラーが表示される場合、サーバーのセキュリティ機能「WAF(ウェブアプリケーションファイアウォール)」を疑いましょう。まえがきみなさん、WAF(ウェブアプリケーションファイアウォール)ご存じですか?2012年の中盤くらいからロリポップやヘテムル等で導入され始めたWebアプリケーション上の脆弱性をカバーする機能です。KoToRiはセキュリティ関係はサッパリなのでWAFについて詳しく解説することはできませんが、このWAFは重大な欠点があります!WAFを有効にしているとWordPressの管理画面上で記事の更新、及びテンプレートの更新を行うと403エラーが出ます。WordPressを使っていて403エラーが出る場合、まずWAFを疑いましょう。WAF出始めの頃から、この欠点はいろんなブログで紹介されていてKoToRiも当初から知っていましたがWAFが登場して約1年半たった今、いい加減改善されてるだろうと思い久々にWAF有効にして更新ボタンをポチってみました。403エラーが表示されました。いい加減どうにかしてよ!ということで、KoToRiBlogでお世話になっているロリポップに直接問い合わせてみました。その時のやり取りを紹介していこうと思います。やり取りなんかどうでもいいから解決方法教えろよ!という方のために先に結論を書いておきます。現時点では結局WAFを無効にするしかないです笑WAFとWordPressを共存できるかロリポップに問い合わせそもそも、ことの発端はロリポップに強制的にWordPressのログインページにアクセス制限をかけられたことから始まりました。ロリポップは、WordPressへの総当たり攻撃や辞書攻撃を検知すると勝手にログインページにアクセス制限を掛ける機能が導入されているようです。上のページに対処方法が記載されているのですが【アクセスするIPがすぐに変わってしまう場合】の手順に「『WAF』を有効にする」というのがあります。ここで誰もが思うはずです。WAF有効にするとWordPress使えねーじゃん!知ってるくせに無責任なこと書いてんじゃないよ!でも、こんなこと書いてるくらいなので、もしかするとWAFとWordPress共存できるようになったのかな!と期待して試してみたわけです。結果403エラーが表示され、あの頃と何も変わっていないくせに「『WAF』を有効にする」とか書いてある事にちょっとプンスカしたので問い合わせてみた次第です笑WAFを巡るロリポップとのやりとりまず、KoToRiはこんな感じでメールしました。.htaccessの書き換えが行われたのですがIPが固定ではないためページ上の「【アクセスするIPがすぐに変わってしまう場合】」を参考に復旧したいのですがWAF設定を有効にするとWordPressのテンプレートの更新や記事の更新が出来ません。再度ご連絡いただけますでしょうか。お客様の操作についてのみ制限を解除して調整する対応を承ります。お客様の操作についてのみ制限を解除して調整する対応を承ります。これは期待が膨らみます。指示通り制限解除してほしいドメイン名を知らせます。http://kotori-blog.com/WAF設定しているのは上記ドメインになります。すると、こんな返信が。「http://kotori-blog.com/」の1週間分(2/6~2/11)のログを調査いたしましたが、WAFの検知ログを確認できませんでした。WordPressの記事やテンプレート更新時にエラーになったということでしたが、その時の状態について再度詳細をご連絡いただけないでしょうか。ログ要るんだWAFとWordPressの共存を試してから1週間経っちゃってたのでもう一度WAF有効にしてエラーをログに残します。http://kotori-blog.com/WAF設定の上記ドメインの2/14のログをご覧ください。ここでやっと具体的な作業指示が来ました。エラーを回避いただく場合、今回「WAF設定」の対象となったものについて動作した「WAF設定」のツールを設定から除外いただくことで制限の対象とならないように調整いただくことが可能です。対応いただく場合、以下の内容を記述した「.htaccess」をWEBサーバー上に設置いただくことで調整いただけます。xss-try-4「xss-try-4」がルール名となり、そのルールを「WAF設定」から除外する記述となります。xss-try-4を追加してやればいいそうです。.htaccessってサーバー直下に置けばいいのか迷うところですが、とりあえず直下に置いとけばいいみたいです。サーバー直下に.htaccessを設置して再びWAFを有効にして「更新」を押してみると。話がちがーう!!!直らなかった旨をすかさずメールしました。ご案内いただいた.htaccessですが設置しても403エラーが改善されませんでした。xss-try-4を追記いたしました。すると、こんな返事が。ご連絡いただいた日時、ドメインについて、こちらでも「WAF設定」における動作制限を確認いたしました。今回は以下のルールが影響し、制限の対象となっております。sqlinj-9sqlinj-13以下の内容を「.htaccess」に追加いただくことで調整いただけます。sqlinj-13なんだかな~って感じですが指示通り.htaccessに案内にあるコードを追加して再度試してみました。sqlinj-13を.htaccessに記述して試してみたのですが、直りません。403エラーが出ます。これに対しての返信がこれ。内容に下記内容を追加していただけますでしょうか。sqlinj-10なお、一度に検知できる拒否の条件は1つのみとなっておりますため、複数の条件で拒否されている場合には引き続きエラーが表示される可能性もございます。その場合にはお手数ではございますが再度お問い合わせをいただけますでしょうか。拒否条件を再度確認し別の条件での拒否が行われておりましたら追加でのご案内をさせていただきます。該当のルールでのみ制限することができる外部からの不正アクセスによるPHPの悪用を防ぐことはできなくなります。設定が必要な場合、操作いただいた後は除外するための記述を削除いただく等、通常の状態に戻していただくことなどをご検討ください。これで出来なかったらいい加減諦める!と意気込んで指示通りに.htaccess修正して「更新」ボタン押してみると。403エラーこれはお手上げです。仮に.htaccessにWAFのいくつかのルールを除外する指定をすることで、403エラーが回避できたとしても、ロリポップからのメールにあるように、本来であれば制限できる不正アクセスを弾けなくなってしまう可能性があります。WAFを有効にしている場合、WordPressの管理画面上で記事の更新、及びテンプレートの更新時に出る403エラーは回避できません。WAFとWordPressを共存させる方法を知っている神がいたら是非方法を教えてください。結局WordPressを使うならWAFは無効にするしかありませんね。クライアントがサーバーのコンパネとかバリバリ入れる人だったら記事更新時だけWAFを無効にするという方法で解決ですが、さすがに面倒くさすぎるでしょう。