У меня есть проект, в котором есть функция входа/выхода, и аутентифицированные пользователи могут загружать, скачивать и удалять файлы, которыми они владеют.
Мой вопрос: достаточно ли безопасности для файловой части моего проекта, чтобы избежать
имена файлов с htmlentities() и запретить пользователям открывать каталог, в котором находятся файлы с
<Directorymatch /cloud/>
Order deny,allow
Deny from all
</Directorymatch>
Это означает, что если загружен файл .php, пользователь не сможет запустить его на моем сервере. Так же если имя файла содержит скрипты/html то оно не распаковывается.
Что еще мне не хватает с точки зрения безопасности? Я, вероятно, буду единственным пользователем этого пиратского «гугл-диска», но я хочу серьезно отнестись к безопасности. Что мне не хватает?






Вам нужно будет убедиться, что ваш загруженный файл хорошо очищен и проверен перед загрузкой.
Библиотека 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 или выделенный сервер, вы можете попробовать его самостоятельно
Пожалуйста, смотрите Обновленный раздел моего ответа для получения более подробной информации и дайте мне знать
Большое спасибо, но мой сайт требует показать пользователю каталог и его содержимое. Какой другой вариант у меня есть для этого, кроме shell_exec("ls")? Должен ли я хранить всю информацию о файле в базе данных? но тогда как я могу получить его размер, имя и местоположение? (Также я размещаю это на своей безголовой малине, но я все еще хочу серьезно относиться к безопасности).
Я нашел функцию scan_dir(), которая выполняет эту работу. Большое спасибо
Спасибо за ответ! Мне действительно нужно дезинфицировать каждый загруженный файл? код не может работать, если я не открою файл, чего никогда не делает мой php-код? я разрешаю только загрузку, загрузку и удаление? Также дополнительный вопрос: безопасно ли запускать команды оболочки, чтобы, например, получить температуру процессора сервера, используя
shell_exec()иexec()? я слышал, что они должны быть отключены в файле php, ini, но мне нужно, чтобы они передавали информацию о сервере с терминала на php и на webapge. Заранее спасибо.