对于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这些不是用户输入,因此是安全的吗?
答案 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
,我发现有很多地方暗示传递内容的功能很慢。为了这个目的,这似乎是正确的,但如果有人知道更轻的方法,我会倾听。