首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >允许用户在树枝上添加任何代码是安全漏洞吗?

问允许用户在树枝上添加任何代码是安全漏洞吗?
EN

Stack Overflow用户
提问于 2018-06-12 06:52:14
回答 3查看 927关注 0票数 4

在我的应用程序中,我希望允许用户添加自己的Twig代码。但是,我不希望它执行任何后端代码(比如PHP代码来访问数据库或文件)。我使用php代码<?php print "hello"; ?>进行了测试。我可以看到PHP代码没有在Twig页面上执行。

据我所知,除非调用扩展名,否则无法在Twig文件中执行PHP代码(可以操作文件或数据库)。

但是,我只想知道更多的建议。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-12 07:12:41

您可以看一看沙箱扩展。您可以设置策略并显式定义每个标记、筛选器、方法、属性和函数。这是我在通过安全渗透测试后得到的建议。您可以在全局或在控制器内设置它,从而呈现用户的细输入。

https://twig.symfony.com/doc/2.x/tags/sandbox.html

https://twig.symfony.com/doc/2.x/api.html#sandbox-extension

代码语言:javascript
复制
/**
 * Adds sandbox limitations to twig-environment to prevent template-injections
 *
 * @return \Twig_Environment
 */
private function getSandboxedTwigEnvironment()
{
    $tags = array('if', 'include', 'import', 'block', 'set', 'for');
    $filters = array('date', 'escape', 'trans', 'split', 'length', 'slice', 'lower', 'raw');
    $methods = array();
    $properties = array();
    $functions = array('include', 'path', 'absolute_url', 'asset', 'is_granted');

    $policy = new Twig_Sandbox_SecurityPolicy($tags, $filters, $methods, $properties, $functions);
    $sandbox = new Twig_Extension_Sandbox($policy);

    $twigEnvironment = $this->getCentralService()->getTwigEnvironment();
    $twigEnvironment->addExtension($sandbox);

    return $twigEnvironment;
}

如果在用户输入中添加了任何禁止的标记、筛选器等,则将引发Twig_Sandbox_SecurityError的异常。

票数 8
EN

Stack Overflow用户

发布于 2019-03-11 16:47:37

只要注意上下文参数(用于呈现模板的参数)是否是实现ArrayAccess接口的对象--在某些情况下,这些对象可以绕过沙箱中的属性/方法策略,因为Twig将它们视为数组。例如,尝试传递一个雄辩的模型,您将注意到您可以轻松地访问属性和关系(甚至能够执行查询方法!)尽管有一个100%严格的安全政策。

票数 0
EN

Stack Overflow用户

发布于 2019-09-28 02:13:46

你可能想看看黑帽对话- https://www.blackhat.com/docs/us-15/materials/us-15-Kettle-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-wp.pdf

可以使用它在服务器上执行代码,但它们仍然需要绕过沙箱。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50810918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档