如何安全地返回Html?

时间:2018-11-24 作者:Alt C

我有

return \'<button type="button" class="btn btn-success">Open Now</button>\';
如果我重复这一点,它会工作得很好。我收到了一个警告,好像echo没有逃逸就被使用了。我知道,这将是没有必要逃避这一点,因为它不是用户输入的东西。但是为了摆脱这个错误,我能做什么呢?

我试过了esc_html($thehtmlabove); 不会对其进行渲染。它像文本一样打印-><button type="button" class="btn btn-success">Open Now</button>

有什么办法吗?

完整代码:

public function opening_hour_html()
        {
            $type = $this->shopstatus(); // this will be \'Open Now\' or \'Closed\'
            if ($type == \'Open Now\') {
                $wppl_open = __(\'Open Now\',\'arika\');
                return \'<button type="button" class="btn btn-success">.\'$wppl_open\'.</button>\';
            } else {
                $wppl_closed = __(\'Closed\',\'arika\');
                return \'<button type="button" class="btn btn-danger">.\'$wppl_closed\'.</button>\';
            }
        }

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

好的,这就是为什么发布给您带来问题的实际代码很重要的原因。

这并没有什么错,这就是你最初拥有的一切:

return \'<button type="button" class="btn btn-success">Open Now</button>\';
如果这是错误,您可以忽略它。

另一方面,这确实需要转义:

$wppl_open = __(\'Open Now\',\'arika\');
return \'<button type="button" class="btn btn-success">.\'$wppl_open\'.</button>\';
的价值$wppl_open 无法信任,因为用户可能会从外部影响它。错误配置或编写的翻译文件可能会导致此HTML中断,或者更糟的是,恶意翻译文件可能会使此代码不安全。此外,引号位置错误。

所以你需要逃跑$wppl_open (并修复引号):

$wppl_open = __(\'Open Now\',\'arika\');
return \'<button type="button" class="btn btn-success">\' . esc_html( $wppl_open ) . \'</button>\';
或者,您可以在执行转换功能的同时使用esc_html__():

$wppl_open = esc_html__(\'Open Now\',\'arika\');
return \'<button type="button" class="btn btn-success">\' . $wppl_open . \'</button>\';
但我不能保证你正在使用的主题检查插件会认为这是安全的,因为如果你只看最后一行,它看起来仍然像是在回显一个未转义的变量。

结束