目次
背景
WordPressで記事を投稿しようとすると、保存時にエラーになり投稿できない問題が発生しました。
- 投稿・更新ができない
- 自動保存(autosave)も失敗
- 管理画面では明確なエラーが出ない
調査の結果、WAF(SiteGuard)が原因でした。
環境
- OS:CentOS系
- Webサーバ:Apache(httpd)
- WAF:SiteGuard Lite
- WordPress:REST API(wp-json)使用
原因
以下のログが出ていました。
tail -n 5 /opt/jp-secure/siteguardlite/logs/http/detect.log
OFFICIAL/00302023/oscmd-try-23
PART_REQBODY/content
ACTION:BLOCK
投稿本文(content)内の文字列がコマンドとして誤検知されていました。
試したこと(失敗例)
sig_custom.txtで除外 → 効果なし
.htaccessで除外 → 500エラー
VirtualHostで除外 → Apache起動エラー
設定しているのに効かない状態にハマりました。
解決手順
1. .htaccess除外を有効化
/opt/jp-secure/siteguardlite/conf/siteguardlite.ini
htaccess_exclude_sig=no
↓
htaccess_exclude_sig=yes
2. .htaccessに除外を追加
<IfModule siteguard_module>
SiteGuard_User_ExcludeSig_With_ParamName oscmd-try-23 content
</IfModule>
3. Apache再起動
結果
- 投稿・更新が正常化
- autosave成功
- BLOCK解消
なぜこうなるか
WordPressは投稿時に /wp-json/wp/v2/posts を使用し、contentに本文を含めます。
記事内の文字列(例:netstat)がWAFによりコマンドとして誤認識され、ブロックされます。
ポイント
- .htaccess除外はデフォルト無効
- 有効化しないと効かない
- JSONのcontentは誤検知しやすい
まとめ
原因:WAF(oscmd-try-23)の誤検知
解決:htaccess_exclude_sig=yes + .htaccess除外設定
補足
APIやJSONを使うアプリでは同様の問題が発生する可能性があります。
より詳しい切り分けや判断の考え方はnoteでまとめています。