WordPress で記事を書いた時、「閲覧できません (Forbidden access)」と表示され投稿や更新ができない

  • WordPress

まず確認すること

何も書いていない記事や、適当なテキスト(タグなどは一切使わないこと)を入力して投稿できるか試してみましょう。もしこれで投稿できたなら、投稿自体は機能しているはずです。 もしタグ等を入れていないのに投稿できない場合は、今回解説する内容とは別の原因と考えられますので、参考にならないかもしれません。

原因

単刀直入に言うと、投稿が上手くいかない記事にスクリプトタグ(<script>~</script>)を記述していたら、それが原因の可能性が高いです。これは、データを POST 送信する際にスクリプトタグを含んでいたら送信をブロックする機能 WAF が働いているためです。

WAF とは?

Web Application Firewall(ウェブアプリケーションファイアウォール)の略称です。レンタルサーバーなどで導入されており、悪意のあるコードを送信できないようブロックする機能です。主に XSS(クロスサイトスクリプティング)の対策で導入されています。

ちなみにこれは WordPress に限った話ではありません。もし WAF の機能が働いていれば、<script >~</script>等を記述したデータを POST 送信した時にブロックされます。

例えば掲示板や SNS のようなサービスでは、投稿内容がページに反映されます。もしそこでバリデーションチェックが甘く、スクリプトタグがそのまま通ってしまうと、悪意のあるコードなどをページ内に埋め込まれる事態となります。WAF は、レンタルサーバーなどでサーバーに送られてきたデータをチェックしそうならないようにガードしてくれる機能です。

とは言え、悪質なスクリプトなのかどうかは判別することが難しいため、とにかくすべてのスクリプトタグがガードされてしまうことが多いです。

解決策

(1)script タグを投稿や固定ページの中に書かない

根本的な解決策とは言えませんが、とにかくスクリプトタグを書かなければよい話です。投稿内にスクリプトを書いてしまうと、サイト保守性も下がってしまいます。FTPで接続できるなら、テーマフォルダの方に javascript ファイルを作って読み込ませた方が良いでしょう。もしどうしてもスクリプトを書きたいなら、(2)を試してみてください。

(2)コントロールパネルから WAF を無効にする

各レンタルサーバーのコントロールパネルで、有効・無効の設定できることが多いです。管理画面やヘルプに載ってないか確認してみてください。ただし無効にした時はセキュリティのリスクを高めます。WordPress をブログとして運用している場合はあまり関係ないとは思いますが…。