在我的laravel应用程序中,我希望最终用户能够自定义某些电子邮件内容和某些页面内容。
因此,在我的SaaS产品中,他们可以自定义欢迎电子邮件,或者有人加入平台后自定义页面。
我目前正在为他们提供一些占位符供他们使用;即
Hello $FirstName$,
然后在我的代码中我只是做
$content = str_replace(['$FirstName$', '....'...
这就是为什么我知道他们不会添加任何PHP或任何东西。但是,我需要做一个if语句,并循环一个对象,所以我已经达到了我的str_replace方法的极限。
我无法使用刀片,因为它允许他们使用<?php
,因此他们可能会混淆应用程序。
Twig听起来很合适。
因此;
有类似的东西吗?
答案 0 :(得分:0)
是的,twig支持使用sandbox extension加载不受信任的模板。
sandbox
扩展名可用于评估不受信任的代码。禁止访问不安全的属性和方法。沙箱安全性由策略实例管理。默认情况下,Twig附带一个策略类:Twig_Sandbox_SecurityPolicy
。此类允许您列出一些标签,过滤器,属性和方法:$tags = array('if'); $filters = array('upper'); $methods = array( 'Article' => array('getTitle', 'getBody'), ); $properties = array( 'Article' => array('title', 'body'), ); $functions = array('range'); $policy = new Twig_Sandbox_SecurityPolicy($tags, $filters, $methods, $properties, $functions);
然后您将使用它like this:
{% sandbox %}
{% include 'user.html' %}
{% endsandbox %}
默认情况下无法从twig模板执行原始PHP,因此您的用户将无法滥用系统太多。它们仍然可能导致无限循环,但是没有允许超过字符串替换的系统可以防止这种情况。