Достаточно ли безопасности, чтобы избежать имен файлов и предотвратить их открытие?

У меня есть проект, в котором есть функция входа/выхода, и аутентифицированные пользователи могут загружать, скачивать и удалять файлы, которыми они владеют.

Мой вопрос: достаточно ли безопасности для файловой части моего проекта, чтобы избежать имена файлов с htmlentities() и запретить пользователям открывать каталог, в котором находятся файлы с

<Directorymatch /cloud/>
        Order deny,allow
        Deny from all
</Directorymatch>

Это означает, что если загружен файл .php, пользователь не сможет запустить его на моем сервере. Так же если имя файла содержит скрипты/html то оно не распаковывается.

Что еще мне не хватает с точки зрения безопасности? Я, вероятно, буду единственным пользователем этого пиратского «гугл-диска», но я хочу серьезно отнестись к безопасности. Что мне не хватает?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Библиотека finfo_* была бы хороша, но она будет работать с версиями php >= 5.3.0. Ссылка Переполнение стека ниже имеет лучшее решение о том, как проверить и защитить загрузку файла, используя лучшие меры безопасности. Ссылка на источник

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

engine = off

Обновленный раздел

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

Например, взгляните на код shell_exec() ниже.

<?php 

// Use ls command to shell_exec 
// function 
$output = shell_exec('ls'); 

// Display the list of all file 
// and directory 
echo "<pre>$output</pre>"; 
?>

Выход:

transaction.php
index.html
moneyupdate.php

Теперь взгляните на Exec() Код ниже

<?php 
// (on a system with the "iamexecfunction" executable in the path) 
echo exec('iamexecfunction'); 
?> 

Выход:

transaction.php

Так что, короче, решать вам. Если вы находитесь на совместном хостинге, вам нужно будет отключить их, потому что ваш соседний хостинг может мешать, но если вы используете VPS или выделенный сервер, вы можете попробовать его самостоятельно

Спасибо за ответ! Мне действительно нужно дезинфицировать каждый загруженный файл? код не может работать, если я не открою файл, чего никогда не делает мой php-код? я разрешаю только загрузку, загрузку и удаление? Также дополнительный вопрос: безопасно ли запускать команды оболочки, чтобы, например, получить температуру процессора сервера, используя shell_exec() и exec()? я слышал, что они должны быть отключены в файле php, ini, но мне нужно, чтобы они передавали информацию о сервере с терминала на php и на webapge. Заранее спасибо.

Francesco Gorini 08.03.2019 03:41

Пожалуйста, смотрите Обновленный раздел моего ответа для получения более подробной информации и дайте мне знать

Nancy Moore 08.03.2019 06:51

Большое спасибо, но мой сайт требует показать пользователю каталог и его содержимое. Какой другой вариант у меня есть для этого, кроме shell_exec("ls")? Должен ли я хранить всю информацию о файле в базе данных? но тогда как я могу получить его размер, имя и местоположение? (Также я размещаю это на своей безголовой малине, но я все еще хочу серьезно относиться к безопасности).

Francesco Gorini 09.03.2019 07:07

Я нашел функцию scan_dir(), которая выполняет эту работу. Большое спасибо

Francesco Gorini 09.03.2019 07:12

Другие вопросы по теме