Это безопасный метод сохранения загруженных файлов? - PullRequest
2 голосов
/ 19 апреля 2011

Достаточно ли безопасно просто проверить расширение загружаемых файлов?Если нет, что еще я должен проверить?

public function saveUploadedFile($fileInputName, $fileLocation)
    {
        $fileName=$_FILES[$fileInputName]['name'];
        if(substr($fileName,-4,4)=='.php')
        {
            my_error('have some cake');
            return FALSE;       
        }
        else 
        {
            move_uploaded_file($_FILES[$fileInputName]['tmp_name'],$fileLocation.$fileName);
        }
    }

Ответы [ 2 ]

4 голосов
/ 19 апреля 2011

Одна вещь, которую я хотел бы изменить, это ваша условность:

if(substr($fileName,-4,4)=='.php')

То, что вы делаете, это занесение в черный список .php файлов, что само по себе хорошо. Однако, (как было отмечено в комментариях к вопросу), вместо этого вы должны использовать подход типа белых списков файлов. Так что для условного вы бы проверили обратное.

Вместо логического выражения «сбой, если файл .php», вы логически сказали бы что-то вроде «сбой, если файл не .jpg, или .gif, или .doc, и т. Д.» Наличие полного списка разрешенных типов и запрещение всех остальных, как правило, безопаснее и помогает предотвратить проникновение плохого файла.

Это не полное решение по безопасности, но в целом белый список безопаснее, чем черный.

3 голосов
/ 19 апреля 2011

Необходимо проверить расширение, размер filesize($filename);MimeType finfo_open(FILEINFO_MIME_TYPE); (если вы используете> PHP 5.3; вам следует проверить, существует ли файл file_exists($filename); я думаю, что это следует сделать. Вам следует также проверить другие расширения, такие как .js, .phtml и т. д.Вы хотите, чтобы они были загружены на ваш сервер.

Удачи.

...