Wordpress不一致地解析"模板名称:xxx"在模板文件中

时间:2015-11-30 17:38:17

标签: php wordpress templates code-injection

我开始为wordpress开发一个自定义主题,我注意到一个明显的错误,这对我来说很奇怪,考虑到' size'和Wordpress的流行。

Wordpress使用一种约定,以便将名为page_mytemplatename.php的文件视为"页面模板"并进行解析以填充"模板"下拉页面编辑选项。

已知,有意并记录在页面模板文件中写评论

private static volatile boolean flag;
public static void main(String[] args) {
  JFrame myFrame = new JFrame("Test");
  JButton myButton = new JButton("Click Me!");
  myButton.addActionListener(new ActionListener() {
    @Override public void actionPerformed(ActionEvent arg0) {
      System.out.println("Button was clicked!");
      flag = true;
    }
  });
  myFrame.add(myButton);
  myFrame.setSize(128, 128);
  myFrame.setVisible(true);
  System.out.println("Waiting");
  while (!flag) { }
  System.out.println("Finished");
}

告诉wordpress添加" myCustomTemplateNameHere"到了下拉列表。

现在......我希望wordpress足够聪明,可以找到"模板名称:xxxx"只在第一个注释中出现模式(并且只有当第一个注释是.php文件中的第一个注释时才会出现!)但是我发现写了"模板名称:xxxxxxx"在任何模板或任何文件中的某处,包括'包括'或者'要求'指令,导致wordpress实际填充菜单与wathever垃圾写入冒号,甚至PHP代码本身!

例如,像这样的声明,在文件中间甚至间接包含在'中包含'指令

/* Template Name: myCustomTemplateNameHere */

会导致" 。 $ tpl_name;下拉列表中的模板!

在我看来,这似乎完全没有问题,可能导致wordpress的安全问题!这可能会导致某种注射,即使你必须承认到达那里会很棘手......

无论如何,我们似乎无法自由撰写像

这样的评论
echo "current template name: " . $tpl_name;

甚至编写包含字符序列的代码"模板名称:xxxx"没有实际导致副作用听起来像是一个错误。

另外,我注意到即使模板名称:xxxx写入包含或必需的文件中也会发生...为什么会发生这种情况。 wordppress解析所有文件,甚至查找包含和解析包含的文件?这对我来说似乎很棘手,非常错误!

我是否设法证明我的观点?

我正在运行WordPress 4.3.1(几乎是撰写本文时的最新版本)

有人可以确认这是我写主题时应该记住的错误吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

我在WordPress 4.3.1中运行了一些实验,以下是我的结果:

按照预期/您的期望,此表单中的评论,页面上的任何位置:

<?php
/**
 * Template Name:  $foobar;
 */
?>

结果:是否会列为模板

页面模板中的直接html:

template name: foobar

结果确实会列为模板

PHP代码作为注释,如下所示:

<?php
/**
 * echo 'Template Name:' . $foobar;
 */
?>

结果确实会列为模板

PHP代码不作为评论,如下:

<?php

echo 'Template Name:' . $foobar;

?>

结果:令人惊讶的是,此DOES被列为模板(列出的模板名称为' . $foobar;

检查解析模板的WP核心代码,它会加载主题中的所有.php个文件,然后在PHP的内容中查找以下正则表达式:

preg_match( '|Template Name:(.*)$|mi', file_get_contents(...))

结论:

  1. 这显然是编写代码的方式。
  2. 这可能不是一个错误。如何在模板选择下拉列表中列出不是模板?
  3. 的文件有什么问题
  4. 避免在文件中使用该关键词(&#34;模板名称:&#34;),这样可以避免在下拉菜单中显示错误的模板名称。