Lab 01 を受けて、うつろい EC は対策を入れた:「URL 文字列に localhost、127.0.0.1、169.254.169.254、10.、192.168. が含まれていたら拒否」というブラックリスト方式。
// 「危険な文字列」を URL に含まないかチェック
$blocked = ['localhost', '127.0.0.1', '169.254.169.254', '10.', '192.168.', '172.16.'];
foreach ($blocked as $b) {
if (strpos($_POST['url'], $b) !== false) abort(400);
}
$content = file_get_contents($_POST['url']);
開発者は「これで AWS メタデータも内部 IP もブロックできた」と思っている。しかし IPv4 アドレスには同じアドレスを表す複数の表記法があり、ブラックリストは漏れる。