さくらのVPSで運用しているWordPressサイトがDDoS/DoS攻撃を受けました(その5)PHPの正規表現では全体一致を\Aと\zで示す

以前の記事(新しいタブで開く)でPHPの全体一致を示す正規表現として”^(キャレット)”と”$(ダラー)”を使っていましたが、「徳丸本 第2版」を読んでいると使わない方が良い書かれていることに気がつきました。全体一致の正規表現は”\A”と”\z”を使ってくださいとのことです。
「徳丸浩の日記」からの引用
同様の主旨のことは徳丸先生のブログサイトでも書かれています。該当する記事(新しいタブで開く)から引用をさせていただきます。
正規表現によるバリデーション等で、完全一致を示す目的で ^ と $ を用いる方法が一般的ですが、正しくは \A と \z を用いる必要があります。Rubyの場合 ^ と $ を使って完全一致のバリデーションを行うと脆弱性が入りやすいワナとなります。PerlやPHPの場合は、Ruby程ではありませんが不具合が生じるので \A と \z を使うようにしましょう。
修正した箇所
具体的にはSiteGuard Liteのカスタムシグネチャで使っていた、2箇所の”^”と”$”を使った全体一致の正規表現を修正しました。
^(log|pwd)$ → \A(log|pwd)\z
修正前の検査文字列
修正後の検査文字列
(log|pwd)と言う文字列とメタ文字について、”^(log|pwd)$”から”\A(log|pwd)\z”に変更しました。
^POST$ → \APOST\z
修正前の検査文字列
修正後の検査文字列
POSTと言う文字列について、”^POST$”から”\APOST\z”に変更しました。
変更の確認
SiteGurad Liteにおける「モジュール設定」の「カスタムシグネチャ」はこんな感じになりますので、[OK]ボタンを押します。
最後に変更前と変更後の検査文字列を確認して、[OK]ボタンを押して全体一致に関する正規表現の変更作業を完了させます。なおPHPでは全体一致の正規表現はとして”\A”と”\z”を使いますが、JavaScriptでは”^”と”$”を使います。
- 404.php
- 404.phpを読み込ませる
- CentOS6
- CentOS7
- DDoS/DoS攻撃
- https接続ができない
- http接続ができない
- JavaScriptの正規表現では全体一致を^と$で示す
- login-rebuilder
- PHPの正規表現では全体一致を\Aと\zで示す
- SiteGuard Lite
- SiteGuard Liteのカスタムシグネチャ
- SiteGuard WP Plugin
- SiteGurad Lite 全体一致は\Aと\zで示す
- SSH
- SSH接続ができない
- SSH接続できない
- WordPressサイト
- WordPressのセキュリティ対策
- WordPressのプラグイン
- wp-login.php
- カスタムシグネチャ
- さくらのVPS
- パス名・パラメータ名・要求メソッドの設定
- ブラウザにサイトが表示されない
- ブルートフォース攻撃
- ページの読み込み速度
- 不正ログイン
- 全体一致の正規表現
- 全体一致は\Aと\zで示す
- 徳丸浩の日記
- 正規表現
- 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう
- 正規表現の全体一致では^と$を使わない
- 総当たり攻撃