Intereting Posts
Предупреждение: PDOStatement :: execute (): SQLSTATE : Недопустимый номер параметра: количество связанных переменных не совпадает с числом токенов в В чем разница между требованием и включением в php? Декодирование массива JSON объектов в PHP, это обратные косые черты? Невозможно получить доступ к самому себе :: если класс класса не активен Испытательное соединение Laravel с SOAP WDSL и обработка исключений Убедитесь, что UNIQUE-строка уже существует с помощью findBy в ManyToMany, любом обходном решении или рабочем решении? Отладка PHP с точками прерывания – примеры из практики, примеры ..? php-fpm разбился, когда curl или file_get_contents запросили https-url Передача массива с одной страницы на другую Перенаправить все страницы одного ДВУ в другой Повторный вызов тайм-аута сеанса PHP? Как запустить файл на localhost? Как получить код статуса HTTP для удаленного домена в php? Как применить класс CSS в зависимости от значения, содержащегося в переменной PHP? Регистрация MySQL Query в CakePHP

каковы недостатки, нужно заботиться о загрузке файла

У меня есть сервер Linux, у меня есть загружаемое изображение на моем сайте, пользователи, которые регистрируются, могут загружать свои изображения, когда он входит в свой профиль, он может видеть его образ, а также он может получить ссылку на его изображение, поэтому изображения загружаются на сервер в каталоге WWW / img. Я проверяю расширение файла на php и разрешаю (.png, .gif, .jpg) файлы

НО я не знаю, почему кто-то загрузил gif-изображение и удалил все мои файлы, я получил изображение, загруженное пользователем, так как у нас есть RAID, содержимое изображения было чем-то вроде …….

function vUMmFr($MkUOmK){$MkUOmK=gzinflate(base64_decode($MkUOmK));for($i=0;$i<strlen($MkUOmK);$i++){$MkUOmK[$i]=chr(ord($MkUOmK[$i])-1)}return $MkUOmK}eval(vUMmFr("7b1pe+M2sij8ved55j............ 

что это такое, как это произошло, как все файлы были удалены? какой язык это, как я могу защитить файлы от удаления.

У вас, вероятно, очень плохо написанный обработчик загрузки файлов, что слепо верит тому, что предоставляет пользователь, помещает файлы с исходным именем пользователя в общедоступный каталог внутри вашего веб-сайта. Короче говоря, ваш сценарий загрузки файлов был эквивалентом большого мигающего неонового знака, ослепляющего «HACK ME!». ,

например, что-то вроде этого:

 <?php if ($_FILES['file']['type'] == 'image/gif') { move_uploaded_files($_FILES['file']['tmp_name'], '/some/path/in/your/docroot/' . $_FILES['file']['name']); } 

Что здесь не так:

  1. отсутствие проверки на ошибки – загрузка файлов может завершиться неудачей по ряду причин, а не проверка ошибок – это очень плохо
  2. Поле ['type'] представляет собой данные, предоставленные пользователем – злоумышленник может легко подделать этот тип mime. Они могут легко загрузить «somescript.php», но пометить его как изображение.
  3. Слепо, используя параметр ['name'] как часть пути, в котором вы храните файл. Опять же, это находится под контролем над пользователем. Один вредоносный пользователь и ваш сервер сбрасываются в туалет.
  4. Хранение файла в docroot. Итак, теперь вы разрешаете ЛЮБОЙ файл ЛЮБОГО типа с ЛЮБЫМ именем, которое будет загружено. Если это сценарий, и местоположение файла доступно по URL-адресу, вы теперь позволяете удаленным пользователям выполнять любой код, который они хотят на вашем сервере.

Короче говоря, имея дело с загрузкой файлов, вы обрабатываете файл как готовую к взрыву ядерную бомбу, которая находится на расстоянии 0,001 секунды от детонации. Вы не храните его с исходным именем файла. Вы не храните его в любом месте, где пользователь может получить его. Вы не храните его с предсказуемым именем файла. Вы выполняете проверку на стороне сервера в файле. Вы поднимаете юбки файла и смотрите под капот, чтобы убедиться, что это то, что должно быть … и даже тогда вы все еще считаете, что это ложь.