DokuWiki保存時の403エラー対処メモ

Wiki.jsからDokuWikiへページを移行している際、MarkdownからDokuWiki記法へ変換した本文を管理画面から貼り付けて保存しようとしたところ、403エラーが発生した。

原因

DokuWikiの記法エラーではなく、サーバー側のWAFやModSecurityが本文の内容を危険な投稿として判定していた可能性が高い。

今回のページには以下のような内容が含まれていた。

  • Linuxのファイルパス
  • systemdのサービス設定
  • Pythonコード
  • Webhook URL
  • requests.post
  • /etc/systemd/system
  • /root/login.py
  • systemctl コマンド

DokuWikiの<code>ブロック内に書いていても、保存時には本文全体がPOSTデータとしてサーバーに送信される。 そのため、WAF側から見ると「サーバー操作コマンドやスクリプトを投稿している」ように見え、403でブロックされたと考えられる。

対処方法

DokuWikiの編集画面から保存するのではなく、サーバー上のDokuWikiページファイルを直接編集・配置した。

DokuWikiのページ本文は通常、以下のディレクトリに保存される。

data/pages/

例えば、ページIDが以下の場合、

game:minecraft:bedrock:xservervps

実際のファイルパスは概ね以下のようになる。

data/pages/game/minecraft/bedrock/xservervps.txt

この.txtファイルにDokuWiki記法の本文を直接保存することで、Webフォーム経由のPOSTを通らず、403エラーを回避できた。

注意点

直接ファイルを配置・編集する場合は、以下に注意する。

  • 文字コードはUTF-8にする
  • 改行コードはできればLFにする
  • ファイル名・ディレクトリ名はDokuWikiのページIDに合わせる
  • 権限や所有者がDokuWikiから読める状態になっているか確認する
  • 編集後にDokuWiki側でページが正しく表示されるか確認する

別の回避方法

レンタルサーバー側でWAFを一時的に無効化できる場合は、以下の手順でも対応できる可能性がある。

  • WAFを一時的にOFFにする
  • DokuWikiの編集画面からページを保存する
  • 保存後にWAFを再度ONに戻す

ただし、公開WikiではWAFを戻し忘れないように注意する。

まとめ

DokuWikiで403エラーが出た場合、必ずしもDokuWiki記法が間違っているとは限らない。

特に、記事内にLinuxコマンド、設定ファイル、Pythonコード、Webhook、サーバーパスなどが含まれている場合は、サーバー側のWAFにブロックされている可能性がある。

今回のような技術メモを移行する場合は、DokuWikiの管理画面から貼り付けるよりも、data/pages/配下の.txtファイルを直接配置する方法が確実だった。