Брандмауэр Symfony2: защита /веб-папка
Я разрабатываю веб-приложение SF2, которое полностью защищено брандмауэром: никто не должен иметь возможности видеть или изменять что-либо до входа в систему (кроме формы входа, конечно).
Итак, вот firewall
часть моего security.yml
файла:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main_login:
pattern: ^/login$
anonymous: true
main:
pattern: ^/
anonymous: false
form_login:
login_path: fos_user_security_login
check_path: fos_user_security_check
logout:
path: fos_user_security_logout
target: /
Это отлично работает: если я введу URL-адрес http://mywebsite.com/app.php/article/show/1
без регистрации, я буду перенаправлен на страницу входа в систему.
Моя проблема в том, что у меня есть некоторые документы и медиафайлы, расположенные в каталоге Symfony web
(например, myapp/web/document/myTextFile.txt
). Они являются доступно через мое приложение для зарегистрированных пользователей, но также и для незарегистрированных пользователей!
Любой, кто наберет http://mywebsite.com/app.php/document/myTextFile.txt
, может загрузить файл...
Почему строка pattern: ^/
не предотвращает этого? Исключена ли папка web
по умолчанию, потому что она содержит папку app.php
и js/
и css/
?
Как я могу защитить свои документы?
Обновление: Отображение защищенных изображений
Я попробовал решение, предложенное Джерри, оно отлично работает для защиты загрузки мои документы.
Однако у меня также есть фотографии в моей папке document
, и я хотел бы отобразить эти фотографии, непосредственно включенные в соответствующие страницы.
Например, в http://mywebsite.com/app.php/article/show/1
будет некоторый текст и картинка myapp/app/Resources/document/AAA.jpg
, а в http://mywebsite.com/app.php/article/show/2
будет некоторый текст и картинка myapp/app/Resources/document/BBB.jpg
и т.д.
Я пытался сделать это с помощью Assetic, но, похоже, это делается для "статических" изображений (например, верхнего логотипа или изображений, которые не зависят от объекта).
Решение, которое я вижу, состоит в том, чтобы преобразуйте изображение в Base64 и включите его следующим образом: <img alt="" src="data:image/png;base64(...)" />
, но оно кажется действительно уродливым...
2 answers
Веб-каталог - это ваш общедоступный корневой каталог, обслуживаемый веб-сервером (Apache/Nginx/...).
По умолчанию любой запрос к существующему файлу вообще не проходит Symfony, поэтому никакие настройки брандмауэра не будут препятствовать доступу к файлам, находящимся в корневом каталоге веб-сайта.
Чистое решение состоит в том, чтобы переместить эти файлы в другой каталог, за пределами веб-корня, например app/Resources/uploads
. Затем вы могли бы написать контроллер Symfony для загрузки этих файлов.
У меня сейчас нет рабочей установки Symfony, но попробуйте переместить свои документы из Интернета, если брандмауэр продолжит работу.
Дайте мне знать ответ, пожалуйста, попытаюсь найти решение, если оно не будет работать или если вы не сможете переместить эти файлы в рабочее состояние.