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

wordpress_security_kusanagi_sakura_2

以前の記事でPHPの全体一致を示す正規表現として”^(キャレット)”と”$(ダラー)”を使っていましたが、「徳丸本 第2版」を読んでいると使わない方が良い書かれていることに気がつきました。全体一致の正規表現は”\A”と”\z”を使ってくださいとのことです。

目次

「徳丸浩の日記」からの引用

同様の主旨のことは徳丸先生のブログサイトでも書かれています。該当する記事から引用をさせていただきます。

正規表現によるバリデーション等で、完全一致を示す目的で ^ と $ を用いる方法が一般的ですが、正しくは \A と \z を用いる必要があります。Rubyの場合 ^ と $ を使って完全一致のバリデーションを行うと脆弱性が入りやすいワナとなります。PerlやPHPの場合は、Ruby程ではありませんが不具合が生じるので \A と \z を使うようにしましょう。

修正した箇所

具体的にはSiteGuard Liteのカスタムシグネチャで使っていた、2箇所の”^”と”$”を使った全体一致の正規表現を修正しました。

^(log|pwd)$ → \A(log|pwd)\z

修正前の検査文字列

sakuravps_ddos_dos_attack_countermeasure_3_5_2_2

修正後の検査文字列

sakuravps_ddos_dos_attack_countermeasure_3_5_2_2_2

(log|pwd)と言う文字列とメタ文字について、”^(log|pwd)$”から”\A(log|pwd)\z”に変更しました。

^POST$ → \APOST\z

修正前の検査文字列

sakuravps_ddos_dos_attack_countermeasure_3_5_5

修正後の検査文字列

sakuravps_ddos_dos_attack_countermeasure_3_5_5_2

POSTと言う文字列について、”^POST$”から”\APOST\z”に変更しました。

変更の確認

sakuravps_ddos_dos_attack_countermeasure_3_5_2_3_2

SiteGurad Liteにおける「モジュール設定」の「カスタムシグネチャ」はこんな感じになりますので、[OK]ボタンを押します。

sakuravps_ddos_dos_attack_countermeasure_5_1

最後に変更前と変更後の検査文字列を確認して、[OK]ボタンを押して全体一致に関する正規表現の変更作業を完了させます。なおPHPでは全体一致の正規表現はとして”\A”と”\z”を使いますが、JavaScriptでは”^”と”$”を使います。

wordpress_security_kusanagi_sakura_2

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次