使用Symfony2上传文件的安全性:在哪里安全地存储它们?

时间:2012-11-19 14:53:34

标签: file-upload symfony security

我使用 Ajax 应用程序在 Symfony2 Web应用程序中上传文件。 当我上传文件时,我将它们放在如下路径中:

"%kernel.root_dir%/../web/bundles/acmehome/images/uploaded"

关于这些文件的管理,我遇到了很多麻烦。

web 目录中的所有文件是否可见/可搜索/可浏览? 如果是,我应该将哪条路径用于存储目的,以使它们仅对注册用户可见?

我提出此问题是因为here用户 Rook 建议不要将文件存储在网络根目录中。

2 个答案:

答案 0 :(得分:0)

是的,在默认配置中,所有文件都是可见/可搜索/可浏览的。您可以通过目录中的.htaccess文件限制访问。

我认为这是将上传文件移到非网络根文件夹中的好方法。

这个话题对我很感兴趣。

答案 1 :(得分:0)

我要做的就是为每次上传创建一个数据库条目

1 - 我将文件上传到web / upload / [month] / [day]等文件夹(我用.htaccess保护上传文件夹)

2 - (我在上传期间创建了一个名为upload的学说实体)我创建了一个条目  名称,  描述,  文件路径,  文件扩展名,  所有者类型(我上传文件的实体),  所有者ID(实体ID)

3 - 最后,如果我将我的文件上传到“博客实体”(供应商\实体\博客)或评论实体(供应商\实体\评论),我将请求所有属于的文件。

$em = $this->getDoctrine()->getEntityManager();
        $documents = $em->getRepository('VendorBundle:Upload')->findBy(array(
        'ownerType' =>$entityName,
        'ownerId'   =>$id
    ));

这种方法非常灵活,允许您创建可以在各种实体上运行的上传模块。 此外,由于上传已编入索引,因此搜索引擎搜索效率更高(因为您可以添加描述,名称等元数据)。