ローカル環境では問題無く、サーバーに反映してform送信を試すと403エラー
WIN + Xamppで試していたら問題なかったのにサーバーにアップして、form送信したら403エラーになる
作成日:2026-01-05, 更新日:2026-01-05
原因
WAF設定が有効になっていたため
状況
レンタルサーバーによってはWAFで拒否られていることがあるとか...
「WAFのログを見たら原因分かるかも?」と言われたので調べてみたら、「検出されたシグネチャ: oscmd-21」というのが出ていた
oscmd-21
シグネチャ oscmd-21 というのは、OSコマンドインジェクション を疑うルールらしい。サーバーを操作するコマンド(ls, cat, chmod, |, ; など)が含まれていると判断された際に発動...するとのこと
対策
- WAFの無効化: 設定を無効化
- WAFの無効化: .htaccessを使ってを無効化
- 文字列を無効化
WAFの無効化: 設定を無効化
レンタルサーバーのWAF設定から無効にして確認(※設定からしばらく待つ。レンタルサーバーによって異なるかも?)
WAFの無効化: .htaccessを使ってを無効化
.htaccess にWAFの除外のルールを記述。とりあえず冒頭に下記のような記述。
▼ text# WAF除外設定 開始
<IfModule mod_siteguard.c>
# ▼サイト全体で oscmd-21(OSコマンドインジェクション検知)を無効化
# SiteGuard_User_ExcludeSig oscmd-21
# URLに "●●●" が含まれる場合のみ除外(下記は、updateの場合)
SetEnvIf Request_URI "update" SITEGUARD_DISABLE_SIG_oscmd-21
</IfModule>
# WAF除外設定 終了
文字列を無効化
WAFを無効化したくない・出来ない場合、文字列を変換する
- 送信時にbase64に変換
- 受取りはデコードする
送信時にbase64に変換
▼ javascript
// 送信ボタンが押された時の処理
const textarea = document.querySelector('〇〇');
const encodedData = btoa(encodeURIComponent(textarea.value));
textarea.value = encodedData;
受取りはデコード
▼ php $rawContent = $_POST[〇〇〇]; $content = urldecode(base64_decode($rawContent)); // 元に戻る