WordPress投稿が403で保存できない原因と解決方法(SiteGuard / oscmd-try-23)

背景

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でまとめています。

この記事はこんな人向け WordPressで記事投稿や更新ができず困っている REST API(wp-json)経由で403エラーになる SiteGuard(W…
note.com