如何在回显之前在php(特别是WordPress)中准备html变量

时间:2017-05-11 08:27:33

标签: php wordpress phpcodesniffer

对于PHP来说,我是一个完全新手,所以我怀疑这个问题有一个简单的答案,但我还是找不到。

我正在使用带有WordPress编码标准的PHP Code Sniffer来组合一个基本的wordpress插件。我遇到的一堆教程代码鼓励回复内容:

echo $before_widget . $before_title . $title . $after_title;

哪个正常工作,但是哪个PHP Code Sniffer会在每个变量回显expected next thing to be an escaping function not $VariableName之前发出警告。直观地说,我不想逃避这些变量 - 包含在其中的HTML应该正确渲染,很难看出攻击者如何更改$args等来自$before_widget对象的实例,以引入XSS漏洞。但正如我所说,我是PHP,WordPress等的新手,我不知道在获得这些变量之前会有什么内容可以访问这些变量。

长话短说:鉴于我希望将HTML呈现为HTML(我不想逃避它), 应如何我要么准备它们,以免我受到任何XSS问题的影响我我不知道,或告知PHP Code Sniffer这些不是用户输入,因此是安全的吗?

2 个答案:

答案 0 :(得分:0)

这将阻止警告

$a = "";

$a .= $before_widget; 
$a .= $before_title;
$a .= $title;
$a .= $after_title;

echo $a;

echo $before_widget ."". $before_title ."". $title ."". $after_title;

答案 1 :(得分:0)

好的,我看到的答案是在打印之前在输出上使用wp_kses()函数。根据{{​​3}},这个

  

确保只有允许的HTML元素名称,属性名称和属性值加上只有合理的HTML实体才会出现在$ string中

它还使得PHP Code Sniffer不再抱怨在没有任何逃逸的情况下回应刺痛。

如果不深入了解实现,我无法肯定地说这涵盖了所有基础(毕竟,理智的HTML实体可以通过多种方式进行解释),但从直觉上来说,感觉就像那种事情我可能想做一些代码来自 - 虽然是受信任的 - 外部来源,以防它们因为不正确而取下网页。

最终代码最终看起来像:

$html = '';
$html .= $args['before_widget'];
$html .= $args['before_title'];
$html .= esc_html( $title );
$html .= $args['after_title'];
$allowed_tags = wp_kses_allowed_html( 'post' );
echo wp_kses( $html, $allowed_tags );

作为一个说明,值得注意的是,在我的旅行中发现kses,我发现有很多地方暗示传递内容的功能很慢。为了这个目的,这似乎是正确的,但如果有人知道更轻的方法,我会倾听。