我正在研究 php 的模板系统,我开始相信纯 php 代码似乎是我想要使用的解决方案。
我是孤独的开发者,所以没有设计师需要一个削弱的竞技场来工作。像 smarty 这样的模板引擎似乎受到“内部平台效应”的影响。如果我坚持良好做法(预先计算的值,仅使用 foreach ),我认为这会奏效。
我的目标是为每个页面共享的 html 字符串提供单一来源。我的想法是通过 include 访问一个单独的 php 文件是实现这个目标的好方法。
但是,我担心这可能会对网站造成安全隐患——我目前想不出任何具体的东西,但有人可以猜出模板的名称并直接请求它,也许会暴露一些东西他们不需要看到。 (我想我可以检查一下,看看它本身是否是请求。)我有预感这可能很糟糕,所以我不想继续做,创造我担心会发生的事情,然后把工作扔掉。
如果一个单独的文件不是最好的主意,我还应该使用什么来基本存储整个站点的字符串?我可以在 sprintf() 中使用的 include 中的字符串常量?从页面特定 html 部分的参数返回 html 字符串的函数?
最佳答案
不应通过 HTTP 提供的文件应存储在您的网络服务器不允许任何内容(至少不是 PHP) 提供给用户的目录中。
两种可能性:
- 将这些文件放在
DocumentRoot
之外 - 或者将这些文件放在一个子目录中,Apache 将无法从该子目录提供任何文件。
此类“未提供”文件通常包括以下内容:
- 配置文件
- 库/框架
- 数据文件(例如 SQLite 数据库;或 i18n 文件)
第一个解决方案:您的目录可能如下所示:
数据/
i18n/
i18n/your-file-here.php
库/
www/
<- 这是 Apache 的 DocumentRootindex.php
another-php-file.php
对于第二个解决方案,只需禁用对包含“数据”或“库”文件的目录的访问,将 .htaccess
(如果您的网络服务器是 Apache)包含类似内容的文件
Deny From All
这样一来,Apache 将不允许任何人通过 HTTP 直接访问该目录中的文件,但是您的可执行 PHP 脚本(在另一个目录中) 仍然能够包含它们。
关于php - 单独的 php 文件作为模板 - 安全隐患?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1949078/