【发布时间】:2013-07-14 15:34:44
【问题描述】:
我正在开发一个使用 Symfony2 将书籍显示为交互式 Flash 内容的应用程序。每本书都有一个 index.html 文件,该文件包含所有嵌入在 html 代码中的 flash 内容和一些目录,其中包含书籍的所有必需部分(图像、js 文件等)与该 index.html 文件链接,并通过“src”相互链接和“href”标签等。我想在我的网站上显示这些书籍,同时防止匿名用户下载它们。
例如:
我的书在 web/Books 文件夹中,要显示 Book1 我必须显示 web/Books/Book1/index.html 文件。通过将这些文件放在 web 目录中,我允许匿名用户通过键入例如 www.example.com/Books/Book1/index.html 或类似的图像、js 文件等来访问它们(路径可以从书籍索引的内容中读取.html)。
有什么办法可以防止这种情况发生吗?
我是服务器的管理员,根目录设置在 web 目录中,如推荐的那样。
提前感谢您的任何回答。
编辑。 [已解决]
好的,我找到了解决方案。这类似于 Pier-Luc 的 Gendreau 提案。
想法:
所有书籍都位于“books”文件夹中,每本书的 index.html 路径为 /books/{title}/index.html。在.htaccess中我写了RedirectMatch,例如:/books/book1/index.html被重定向到/bookrouter/book1/index.html。像这样的路径不是现有文件的路径,因此 Symfony2 可以将其作为路由处理。路由模式是 /bookrouter/{path}.{_format} (需要 {path} 以允许“/”符号),因此我可以使用正确的标题和内容创建准确的响应,并通过所有必需的身份验证/授权提供所需的文件。这有两个不好的方面:
1. 我必须分别处理每个文件扩展名以创建正确的 http 标头和内容。
2. 更有经验的程序员说,如果我们的用户数量和我们预期的一样多,这种处理每个请求的方式会杀死我们的服务器,所以我们不能使用它。
所以人们,谢谢你的时间!我希望我的解决方案描述清楚,也许将来有人会发现它有用。干杯!
【问题讨论】:
-
您应该考虑使用数据库来存储您的数据。然后您只需要担心保护一页,您可以在您的图书对象上使用 ACL 以获得更细粒度的安全性。这是先前关于基本 Symfony2 安全性的答案:stackoverflow.com/questions/16656759/…
-
此时我的双手被束缚了——这些书必须是 html、js、css、swf(可能还有其他)文件和图像的集合,并且运行它们的唯一方法是查看 index.html每本书的。它们存在于服务器上的 Symfony 目录旁边,符号链接位于 web 目录中。
-
此时,如果您打算使用 symfony,您将需要重构您正在开发的任何遗留应用程序。最短的方法就是使用 apache 和基本身份验证,但它根本不涉及 Symfony。
-
这是一个悲伤的消息。我将不得不向我的老板解释这一点。感谢您的宝贵时间。
标签: symfony symfony-2.3