Wiki.jsからDokuWikiへページを移行している際、MarkdownからDokuWiki記法へ変換した本文を管理画面から貼り付けて保存しようとしたところ、403エラーが発生した。
DokuWikiの記法エラーではなく、サーバー側のWAFやModSecurityが本文の内容を危険な投稿として判定していた可能性が高い。
今回のページには以下のような内容が含まれていた。
requests.post/etc/systemd/system/root/login.pysystemctl コマンド
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にするレンタルサーバー側でWAFを一時的に無効化できる場合は、以下の手順でも対応できる可能性がある。
ただし、公開WikiではWAFを戻し忘れないように注意する。
DokuWikiで403エラーが出た場合、必ずしもDokuWiki記法が間違っているとは限らない。
特に、記事内にLinuxコマンド、設定ファイル、Pythonコード、Webhook、サーバーパスなどが含まれている場合は、サーバー側のWAFにブロックされている可能性がある。
今回のような技術メモを移行する場合は、DokuWikiの管理画面から貼り付けるよりも、data/pages/配下の.txtファイルを直接配置する方法が確実だった。