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