担心清理插件定制的css中的管理员输入明智吗?

时间:2017-01-18 作者:CK MacLeod

在众多插件和主题中,开发人员将为管理员级用户提供一个选项,让他们输入自己的额外CSS(显然是为了定制输出)。一些插件和主题还提供了添加Javascript的选项。在大多数情况下,输入将从textarea发布,并添加到现有的样式表文件或发送到wp_head.

通常,包括拥有100000用户的插件,唯一的安全措施是nonce。

现在,对我来说,对于这个特定的功能来说,暂时的情况似乎已经足够了:如果一个站点已经被破坏到具有管理员权限的用户自己输入恶意脚本的程度,那么这种情况似乎相当绝望。。。

然而,一些开发人员似乎认为,通过$\\u POST变量将CSS代码发送到处理它并将其添加到选项表,然后添加到特定页面标题的函数中,可以截取和修改CSS代码。我不明白这到底是怎么回事,再次假定管理员的行为是负责任的。不是说这不可能发生,只是不知道而已。(有人想解释一下吗?)

WordPress本身不包括CSS清理器或验证器,也不包括CSSTidy类型的功能,但具有高度安全意识的开发人员有时会尝试模拟Jetpack或WordPress核心实践,添加CSSTidy或CSS解析器,以消除漏洞。讨论了这个问题,并提出或概述了一些方法或途径herehere .

目前,我正在考虑将以下内容应用到$\\u后期处理函数中-所讨论的变量是“style”:

$style = filter_input(
            INPUT_POST, \'style\', FILTER_CALLBACK, array( \'options\' => \'tidystyle\' )
            ) ;
被调用的函数看起来是这样的(实际函数的前四行来自上面链接的两个堆栈交换/溢出问题中的第一个)

/* Belt and Suspenders CSS TIDIER
 * STYLESHEET ENTERED BY ADMIN ONLY, PROCESSED ONLY WITH SECURITY NONCE
 */
function tidystyle( $css ) {

    $css = str_replace( \'/-moz-binding/\', \'\', $css );
    $css = str_replace( \'/expression/\', \'\', $css );
    $css = str_replace( \'/javascript/\', \'\', $css );
    $css = str_replace( \'/vbscript/\', \'\', $css );
    $css = str_replace( \'@import\', \'\', $css ) ;
    //took this next one from wp-includes/formatting.php
    //it underlies sanitize_textarea_field()
    //I like it because it doesn\'t bother ">" in the absence of "<"
    //and also allows for $newlines
    $css = _sanitize_text_fields( $css, TRUE) ;

    return $css; 

}
然而,我想知道any 其中,或者更为成熟的CSSTidy/HTML Purify等方法,对于这种特殊类型的使用来说是非常必要或可取的,或者可以实现任何有意义的功能:管理级用户通过textarea输入添加自定义CSS。

(PS刚刚注意到回调函数中调用的函数-_sanitize_text_fields - 显然是从WP 4.7开始的-所以使用时要小心!)

1 个回复
SO网友:Mark Kaplun

在这种情况下,关注安全是错误的。这些JS/HTML/CSS文本框对用户很不利,因为开发人员基本上希望用户能够编写代码,有时用户甚至很难复制&;粘贴代码。

在最坏的情况下,当不使用自定义程序时,应进行一些验证/清理,以防止网站由于某些语法错误而“关闭”,尤其是因为这些选项通常没有撤消功能。

至于安全方面,CSS不能成为安全的IIRC,因为它能够包含SVG,其中可能包含JS。如果只有管理员可以编辑相关的CSS,那么正如你所说,没有什么问题,但请记住,网络中的管理员不是整个站点的真正管理员,他们不应该被授予访问权限,或者你应该检查unfiltered_html 在接受用户的任何更改之前的功能。

最后,同样重要的是,4.7已经有了一个CSS编辑器,你真的需要重新设计吗?如果任何CSS可以进入您的设置,并且您不需要对其进行任何特殊处理,只需使用核心功能即可。

相关推荐

Security updates to 3.3.2

我知道所有的安全更新都很重要,但从1到10的范围来看,从3.1.3升级到3.3.2有多重要。我有一些网站需要升级,但主机将我锁定在一个旧版本的php中,限制我使用3.1.3。我目前正在运行php的5.2.3版本。谢谢Bart