繁体   English   中英

Symfony2防火墙:保护/ web文件夹

[英]Symfony2 Firewall: protect /web folder

我正在开发一个完全在防火墙后面的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:     /

这很好用:如果我在未记录时输入网址http://mywebsite.com/app.php/article/show/1 ,我会转到登录页面。

我的问题是我在Symfony的web目录中有一些文档和媒体文件(例如myapp/web/document/myTextFile.txt )。 它们可以通过我的应用程序访问已登录用户,也可以访问非登录用户

任何输入http://mywebsite.com/app.php/document/myTextFile.txt人都可以下载文件......

为什么没有pattern: ^/ line阻止这个? web文件夹是否默认排除,因为它包含app.phpjs/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(...)" /> ,但它看起来真的很难看......

Web目录是您的公共根目录,由Web服务器(Apache / Nginx / ...)提供服务。

默认情况下,对现有文件的任何请求都不会通过Symfony,因此没有防火墙设置会阻止访问驻留在Web根目录中的文件。

干净的解决方案是将这些文件移动到webroot外部的另一个目录,例如app/Resources/uploads 然后你可以编写一个Symfony控制器来下载这些文件。

我现在没有Symfony的工作安装,但是如果防火墙继续运行,请尝试从Web移动文档。

请让我知道答案,如果它不起作用,或者如果你无法在生产中移动这些文件,将尝试找出解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM