Я пытаюсь разработать небольшую социальную сеть и хотел бы знать, достаточно ли такого подхода, чтобы сделать мой "сценарий обработки загрузки файлов" максимально безопасным. Я хочу, чтобы мои пользователи загружали изображения [jpeg, jpg, png, gif], видео [3gp, wma, mp4] и mp3 файлы. Я рассмотрел многие вопросы здесь, в SO, но большинство из них, похоже, имеют дело с загрузкой изображений в деталях, а не с видео и mp3. Я хотел бы знать, что еще я могу сделать, чтобы сделать скрипт доступным для загрузки скриптом msot. [да, я довольно параноидальный об обеспечении безопасности и определенно хочу, чтобы мой сайт был известен своей безопасностью, а не скоростью]. Мой нынешний подход выглядит следующим образом:
В файле.htaccess будут добавлены:
SetHandler none
SetHandler default-handler
Options -ExecCGI
php_flag engine off
ForceType application/octet-stream
<FilesMatch "(?i)\.jpe?g$">
ForceType image/jpeg
</FilesMatch>
<FilesMatch "(?i)\.gif$">
ForceType image/gif
</FilesMatch>
<FilesMatch "(?i)\.png$">
ForceType image/png
</FilesMatch>
<FilesMatch "(?i)\.mp3$">
ForceType audio/mpeg
</FilesMatch>
<FilesMatch "(?i)\.mp4$">
ForceType video/mp4
</FilesMatch>
Код, который я пытаюсь сделать, выглядит следующим образом:
$fileInput = $_FILES['image'];
$sizeLimit="4000";
if($fileInput['error'] === UPLOAD_ERR_OK && isset($fileInput['tmp_name'])){
if($fileInput['size'] < $sizeLimit){
$cleanedName=stripslashes($fileInput['name']); //cleaning file name
$checking = pathinfo($cleanedName); //finding extension
$ext=$checking['extension'];
$finfo = finfo_open(FILEINFO_MIME_TYPE); // find mime type
$mimetype = finfo_file($finfo, $fileInput['tmp_name']);
finfo_close($finfo);
.
.
.//generate random name and use move_uploaded_file() and chmod()
}
}
Является ли этот подход достаточным для обеспечения безопасности моего сайта или существуют некоторые серьезные изъяны в этом методе?. Заранее спасибо за вашу помощь.
Рекомендуется проверить расширение имени файла, хотя имейте в виду, что тип mime можно легко подделать, поэтому это не является хорошей проверкой на безопасность.
Что вы до сих пор хорошо, мои дополнительные советы:
X-Content-Type-Options: nosniff
заголовок X-Content-Type-Options: nosniff
для предотвращения любых атак XSS
через IE mime sniffing.