Lab 02 のフィルタ回避を受けて、うつろい journal は「生の ../ または変種を含むなら拒否」に変更した:
// PHP - 危険パターンを拒否
$file = $_GET['file'];
if (preg_match('/\\.\\.\\//', $file)) {
abort(400, 'Invalid path');
}
return readfile('/var/www/utsuroi/articles/' . $file);
しかし、フィルタが見ているのはサーバが受け取った文字列(Web サーバが URL デコード後)。../ を URL エンコードして送れば、フィルタの段階では %2e%2e%2f として残るが、その後ファイルシステム関数を呼ぶ前にもう一度デコードされる(またはアプリケーション側で urldecode される)場合がある。