オープンリダイレクタ対策の正規表現によるドメインのチェック

preg_match('/example.com/',$url);

これは$urlにexample.comが含まれることを確認する正規表現だが、

このように、example.comをファイル名に含むファイルを作っておくことで回避できる。
http://wana.com/example.com.php

 

次に、/dir/test.phpのような、スラッシュで始まるファイルパス参照かどうかを確認する正規表現だが、
preg_match ('/^\//',$url);

このように、スラッシュを2つ連続させ、ネットワークパス参照と呼ばれる形にすることで、すり抜けてしまう。
//wana.com/wana.php

 

正解はこれ。
preg_match('/^https?:\/\/example.jp\//',$url);

http(s)://example.jp/で始まることをチェックする。

ハットは文字列の最初を表す。

ハテナは直前の一文字の有無を許容する。