-2

当谈到 PHP 时,我是一个完全的新手,所以我怀疑这个问题有一个简单的答案,我只是无法找到。

我正在使用 PHP Code Sniffer 和 WordPress 编码标准来组合一个基本的 wordpress 插件。我遇到的一堆教程代码鼓励按照以下方式回显内容:

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

哪个工作正常,但是哪个 PHP 代码嗅探器会在每个变量回expected next thing to be an escaping function not $VariableName显 .实例$args对象$before_widget等来自哪里来引入 XSS 漏洞。但正如我所说,我是 PHP、WordPress 等的新手,在我得到这些变量之前,我不知道有什么可以完全访问这些变量。

长话短说:鉴于我希望将 HTML 呈现为 HTML(我不想转义它),我应该如何准备它们以保护我免受任何我不知道的 XSS 问题,或者通知 PHP 代码嗅探器认为这些不是用户输入,因此安全吗?

4

2 回答 2

0

好的,看起来我想要的答案是在wp_kses()打印之前使用输出上的功能。根据文档,这

确保只有允许的 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中,我发现许多地方表明这是一个非常缓慢的功能来传递内容。出于这个目的,这似乎是正确的,但如果有人知道更轻的方法,我会听听。

于 2017-05-11T21:32:10.043 回答
0

这将阻止警告

$a = "";

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

echo $a;

或者

echo $before_widget ."". $before_title ."". $title ."". $after_title;
于 2017-05-11T08:36:06.160 回答