WordPress搜索筛选器可删除可能的脚本注入

时间:2012-10-12 作者:Robbiegod

我正在尝试编写一个简短的插件,可以从搜索表单中过滤html字符。如果有人进来<script>alert(\'some infectious js!\');</script> 在搜索表单中,我想消除将此命令输入搜索表单的可能性。

我试过这个:

function SearchFilter( $query ) {
     if ( is_search() ) {
          $query = strip_tags($query);
          return;
     }
 }
 add_action (\'pre_get_posts\', \'SearchFilter\');
当我去测试它时,我输入<script>alert(\'some infectious js!\');</script> 进入搜索栏,我只得到wordpress中的一个空白白页。搜索仍然有效,但只要我输入脚本,它就会打破框。wordpress默认不会处理这个问题,这似乎很奇怪,还是我完全错了?

提前谢谢。

1 个回复
SO网友:fuxia

WP是否已经处理了这种情况,脚本将永远不会执行,因为函数the_search_query() 将返回其转义输出。

在实际搜索之前对其进行转义将中断代码中的搜索。如果你在博客上写关于脚本注入的内容,你的访问者应该能够搜索到。

更新这里是我的一个旧插件。它支持在转义代码中搜索,并中断对未转义代码的搜索<, &>. 不幸的是,当它与Relevansi或search Unleased等搜索插件一起使用时,会产生一些副作用。

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: T5 Search escaped characters
 * Description: Enable to search for escaped &lt;, &gt; and &amp;.
 * Plugin URI:
 * Version:     2012.08.25
 * Author:      Thomas Scholz
 * Author URI:  http://toscho.de
 * License:     MIT
 * License URI: http://www.opensource.org/licenses/mit-license.php
 */

add_filter( \'posts_search\', \'t5_search_escaped_characters\', 10, 2 );

function t5_search_escaped_characters( $search, $obj = NULL )
{
    if ( $obj->is_search and empty ( $search ) and is_main_query() )
    {
        remove_filter( current_filter(), __FUNCTION__ );
        return \' AND 1 = 2 \';
    }
    $s   = $obj->query_vars[\'s\'];
    // Double-encoding FALSE in case another plugin did that already.
    $esc = htmlspecialchars( $s, ENT_NOQUOTES, \'utf-8\', FALSE );
    return str_replace( "%$s%", "%$esc%", $search ) . \' \';
}
如果您想尽早接触搜索字符串,这可能是一个开始。

结束

相关推荐