php - 单独的 php 文件作为模板 - 安全隐患?

标签 php templates security

我正在研究 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 的 DocumentRoot
    • index.php
    • another-php-file.php


对于第二个解决方案,只需禁用对包含“数据”或“库”文件的目录的访问,将 .htaccess (如果您的网络服务器是 Apache)包含类似内容的文件

Deny From All

这样一来,Apache 将不允许任何人通过 HTTP 直接访问该目录中的文件,但是您的可执行 PHP 脚本(在另一个目录中) 仍然能够包含它们。

关于php - 单独的 php 文件作为模板 - 安全隐患?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1949078/

相关文章:

html - 消除图像之间的垂直空白

iphone - 在 iPhone 上生成 key 对并打印以记录为 NSString

security - 是否可以通过 SSH 实现 REST API?

php - 这就是用 PHP 和 Ajax 防止 CSRF 所需要做的全部工作吗?

php - 根据 MySQL 条件创建动态 PHP 页面需要哪些步骤?

javascript - 通过将 id 从 javascript 发送到 php 页面来删除所选行

php - MySQL Last_Insert_ID 语法

PHP 类型转换 float->int

c++ - 使用指向类 T 成员的函数指针作为模板类 <T> 函数中的参数的不良做法?

file - IntelliJ 文件模板光标位置