防止映像文件的空字节攻击


preventing null byte attack with image files

根据我在网上读到的,为了防止空字节攻击,我应该对所有用户输入使用以下命令:

$data = str_replace(chr(0), '', $data);

对我来说很有意义。但是,如何处理用户通过表单上传的图像呢?我没有太多处理这种图像的经验。

我想你不能这样做:

$_FILES['pic']['tmp_name'] = str_replace(chr(0), '', $_FILES['pic']['tmp_name']);

正如在注释中提到的,PHP通常不再容易受到这种攻击。尝试打开文件名包含空字节的文件现在将失败,而不是打开一个意外的文件。

即使在容易受到此攻击的PHP版本中,也不需要对上传的文件进行过滤。用于上传文件的临时文件名由PHP内部生成,并且不会包含空字节或任何其他"令人惊讶"的特殊字符,如空格。