我正在开发一个完全在防火墙后面的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: /
这很好用:如果我在记录时输入了网址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/
文件夹?
如何保护我的文件?
更新:显示受保护的图片
我尝试了Gerry建议的解决方案,它可以很好地保护我的文档下载。
但是,我的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
等。< / p>
我尝试用Assetic做这件事,但似乎是为“静态”图像(如顶级徽标或不依赖于对象的图像)完成的。
我看到的一个解决方案是在Base64中转换图像并将其包含在内:<img alt="" src="data:image/png;base64(...)" />
,但它看起来真的很丑......
答案 0 :(得分:1)
网络目录是您的公共根目录,由网络服务器提供服务(Apache / Nginx /...)。
默认情况下,对现有文件的任何请求都不会通过Symfony,因此没有防火墙设置会阻止访问驻留在Web根目录中的文件。
干净的解决方案是将这些文件移动到webroot外部的另一个目录,例如app/Resources/uploads
。然后你可以编写一个Symfony控制器来下载这些文件。
答案 1 :(得分:0)
我现在没有安装Symfony,但如果防火墙继续运行,请尝试从网上移动文件。
请让我知道答案,如果它不起作用,或者如果你无法在生产中移动这些文件,我会尝试找出解决方案。