3

私は黄金律を知っています。ユーザーが提供したファイル名は絶対に信用しないでください。でも、そのルールを破りたい。次のスキームについて危険なことはありますか?

   $name = $_POST['name'];
   $id = intval($_GET['id']);

   $sanitized_name = preg_replace('/[^0-9a-zA-Z]/','',$name);

   $fp = fopen("/path/to/".$id."/".$sanitized_name.".jpg",'w');

0-9 または az または AZ ではないすべてを '' に置き換えると、絶対に 0% の変更があり、誰でも '.' を挿入できます。独自の拡張子を作成する (NULL バイトの組み合わせで) か、ディレクトリをトラバースします。これは安全そうです。SOで実行したかっただけです。

また、ID は強制的に int になるため、ファンキーなものはすべて 0 になります。

4

1 に答える 1