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