Symfony2 - 如何显示内容并保护对它的安全访问

时间:2013-07-14 15:34:44

标签: symfony symfony-2.3


我正在开发一个应用程序,它将书籍显示为Symfony2的交互式Flash内容。每本书都有一个index.html文件,其中包含嵌入在html代码中的所有闪存内容以及一些目录,其中包含与此index.html文件链接的书籍(图像,js文件等)的所有必需部分以及“src”相互之间的所有部分和'href'标签等。我想在我的网站上显示这些书籍,同时防止匿名用户下载它们。
例如:
我将我的书放在web / Books文件夹中并显示Book1我必须显示web / Books / Book1 / index.html文件。通过将这些文件放在web目录中,我允许匿名用户通过键入例如www.example.com/Books/Book1/index.html或类似的图像,js文件等来访问它们(路径可以从书籍索引的内容中读取的.html)。
有什么方法可以防止这种情况发生吗? 我是服务器的管理员,根据建议在web目录上设置根目录。
提前感谢您的任何答案。

EDIT。 [解决]
好的,我找到了解决方案。这与Pier-Luc的Gendreau提案类似。
这个想法:
所有书籍都位于“书籍”文件夹中,每本书的index.html路径为/books/{title}/index.html。在.htaccess中我编写了RedirectMatch,例如:/books/book1/index.html被重定向到/bookrouter/book1/index.html。像这样的路径不是现有文件的路径,因此Symfony2可以将其作为路由处理。路由模式是/bookrouter/ {path}。{_ format}(需要{path}允许'/'符号),因此我可以使用正确的标头和内容创建准确的响应,并提供所有必需的身份验证/授权所需的文件。这有两个不好的方面:
1.我必须分别处理每个文件扩展名以创建正确的http标头和内容 2.更有经验的程序员说,如果我们拥有尽可能多的用户,这种处理每个请求的方式都会导致服务器无法使用,因此我们无法使用它。

所以人们,谢谢你的时间!我希望我的解决方案能够清楚地描述出来,未来某个人可能会发现它很有用。干杯!

3 个答案:

答案 0 :(得分:0)

要保护css,js和图像文件,您应该使用Assetic,因为Assetic会为资产生成新的URL。

例如,新URL将是/ css / secure:

{% stylesheets '@AcmeFooBundle/Resources/public/css/secure-folder/*' output='css/secure/' filter='cssrewrite' %}

    <link rel="stylesheet" href="{{ asset_url }}" />

{% endstylesheets %}

然后,您可以为匿名用户限制此路由。

# app/config/security.yml
security:
    # ...
    access_control:
        - { path: ^/css/secure, roles: ROLE_USER }

答案 1 :(得分:0)

您需要设置防火墙以拒绝匿名用户访问某些路由。

请参阅文档章节Security

要快速入门,请考虑使用FOSUserBundle

答案 2 :(得分:0)

如果不对您当前的结构进行任何修改,我认为您正在寻找一个不存在的答案。这些书在Symfony之外,因此排除了每种正确的Symfony方式来确保访问。您使用.htaccess进行了基本的HTTP身份验证。

但是,你可以把书带到Symfony里面。

首先,移动存储视图的index.html本书,将每本书重命名为slug(Book1的index.html变为Book1.html等)

其次,创建一个基本路由为BookController的{​​{1}}和一个带/Books参数的secureBookAction,以便图书路由为$slug。看起来你知道如何确保一条路线,所以我会把它留给你。

第三,根据slug参数渲染视图。你可能想要保留一本书的清单,这样你就可以对一本与书不对应的slu what做出适当的反应。

最后,我会将您的资产留在现在的位置,只要确保您使用的是绝对路径,否则它们会中断。它会更简单,如果没有附带的书,它们就不太可能有用。

很抱歉,如果我的回答是代码,我几周​​内没有触及任何Symfony,尽管我认为我已经明确了这个策略。