PHP 标签 Php(禁用)
DouView 禁止在模板中嵌入原生 PHP 代码。这是一条硬性安全约束:模板只负责展示,不承接任意代码执行。
一、{php} 编译期拒绝
{php} echo "hi"; {/php} {* 编译期直接报错 *}
PhpTagCompiler 在编译期无条件抛错:php tags not permitted。也就是说,只要模板里出现 {php},该模板就无法编译,不存在「运行期才出错」的侥幸。
二、文本中的 PHP 起止符自动转义
模板文本里出现的 <?、?>、language=php 等片段也会被自动转义为字面输出,不会被 PHP 解析执行,从根本上杜绝了通过模板注入原生 PHP 的可能。
三、为什么禁用
- 安全:允许模板内嵌 PHP 等于允许任意代码执行,一旦模板可被不可信来源修改,就是严重的 RCE 风险;
- 职责分离:业务逻辑应在控制器 / 服务层,模板只做展示;
- 可缓存 / 可预测:无副作用的模板才能安全地编译缓存。
四、替代方案
需要在模板里做的「计算 / 逻辑」,用引擎提供的能力替代:
- 条件与循环:
{if}/{foreach}/{list}/{category}; - 数据处理:修饰器链(见「变量修饰器 Modifiers」篇);
- 复杂装配:放到控制器或主题的
inc/..from_theme.php(见「主题数据装配 Portal」篇),处理成数组再注入模板。