【发布时间】:2015-06-16 13:48:23
【问题描述】:
我正在开发一个完全位于防火墙后面的 SF2 网络应用程序:在登录之前,任何人都不能看到或修改任何内容(当然,登录表单除外)。
这是我的security.yml 文件中的firewall 部分:
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/文件夹?
如何保护我的文件?
更新:显示受保护的图像
我尝试了 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等
我尝试使用 Assetic 进行此操作,但似乎是针对“静态”图像(如顶部徽标或不依赖对象的图像)完成的。
我看到的一个解决方案是将图像转换为 Base64 并像这样包含它:<img alt="" src="data:image/png;base64(...)" />,但看起来真的很难看...
【问题讨论】:
-
我认为这个 Stackoverflow 主题可能会对您有所帮助 [stackoverflow.com/questions/12148272/… [1]: stackoverflow.com/questions/12148272/…
-
为什么不直接将图片上传到
src/My/MyBundle/Resources/public? -
我应该在我的图片的
src(<img src="?????" />) 中添加什么内容?因为如果我输入<img src="{{ asset('../app/Resources/documents/'~document.fileName)}}"/>然后app/console assetic:dump或app/console assets:install,app/Resources/documents文件夹的内容将被复制(或符号链接)回web/!
标签: php symfony fosuserbundle