0
我想在文件上传之前验证Symfony3上的文件扩展名。到现在为止,我使用这个代码(这是一个简化版本,只是作为一个片段):在Symfony3上验证文件扩展名
if ($form->isSubmitted() && $form->isValid()) {
$form->handleRequest($request);
$file = $form->get('file')->getData();
$ext = $file->guessExtension();
if($ext !== 'myextension'){
die('not allowed');
}
$name = md5($file->getClientOriginalName().time());
$full_name = $name.'.'.$ext;
$dir = __DIR__.'/../../../web/upload';
$file->move($dir,$full_name);
}
的问题是:将文件中的临时目录反正上传?这是安全的吗?有没有更好的方法来做到这一点?我最担心的是有人试图上传二进制文件或脚本。谢谢
编辑(感谢加布里埃尔迪茨):该文件是一个实体的财产。我用assert来声明它:
/**
* @Assert\File(maxSize="20M")
*/
private $file;
此文件是实体的属性吗? –
对,我用它作为断言: /** * @Assert \ File(maxSize =“20M”) */ private $ file; –
文件扩展名只是名称中的字符串。检查它并不能帮助用户上传几乎任何类型的文件。如果你想要安全(er),把它放在一个地方,它不能被web服务器执行。这是一个流行的话题,文件上传有很多问题。 – svgrafov