Я использую Laravel для веб-приложения. Загрузил все на производство и выяснил, что к некоторым файлам можно напрямую обращаться по URL-адресу – например, http://example.com/composer.json
Как избежать этого прямого доступа?
Вы используете неправильную конфигурацию веб-сервера. Направьте ваш веб-сервер в public
каталог и перезапустите его.
Для Apache вы можете использовать эти директивы:
DocumentRoot "/path_to_laravel_project/public" <Directory "/path_to_laravel_project/public">
Для nginx вы должны изменить эту строку:
root /path_to_laravel_project/public;
После этого все файлы Laravel больше не будут доступны из браузера.
Это неверно. composer.json
находится за пределами public
каталога и поэтому не должен быть доступен. Это означает, что ваша конфигурация VirtualHost неверна.
Убедитесь, что ваш путь к вашему каталогу заканчивается /public
.
Укажите веб-сервер в общий каталог в корневой папке проекта
project root folder/public
но если у вас нет общей папки, и вы уже указываете на корневую папку, вы можете запретить доступ, написав следующий код в файле .htaccess
.
<Files ".env"> Order Allow,Deny Deny from all Allow from 127.0.0.1 </Files>
в приведенном выше коде, сначала мы отказываемся от всех и разрешаем только от собственного сервера (localhost к серверу), и, следовательно, мы можем защитить его от внешних пользователей.
Установите корень документа как public
каталог, чтобы другие файлы не были доступны напрямую. Ищите его в своем Apache / nginx / ??? файлы конфигурации.
Это зависит от вашего веб-сервера. С Apache это будут файлы .htaccess, тогда как с Nginx он будет обрабатываться в файле конфигурации сервера.
Вы также можете запретить файлы в .htaccess.
<Files "composer.json"> Order Allow,Deny Deny from all </Files>
С помощью Apache вы можете создать файл .htaccess в корневом каталоге проекта Laravel, чтобы переписать все запросы в public / directory.
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^(.*)$ public/$1 [L] </IfModule>