我需要清理快捷码的函数输入吗?

时间:2019-03-30 作者:Steve

我使用以下自定义插件计算MemberPress数据库中的成员数:

function display_member_count( $atts ) {

    global $wpdb;
    $sql = "SELECT COUNT(`meta_key`) as count FROM `wp_usermeta` WHERE `meta_key` = \'mepr-address-state\' && `meta_value` = \'" . $atts[0] . "\';";
    $myrows = $wpdb->get_results($sql);
    $member_count = $myrows[0]->count;

    return $member_count;
}

add_shortcode( \'member-count\', \'display_member_count\' );
然后我会使用短代码[member-count nsw] 显示新南威尔士州的成员数量。

我需要消毒吗$atts? 如果是,请怎么做?

感谢您的帮助。

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

当然,你必须对它进行消毒并逃离它。

否则,网站的任何作者/编辑都可以对您的数据库执行任何查询。

首先,决不能像在代码中那样创建SQL查询。决不要将原始SQL与任何可变或来自用户的内容连接起来。

您应该使用$wpdb->prepare 为此。

因此,您的代码应该更像这样:

$sql = "SELECT COUNT(meta_key) as count FROM {$wpdb->usermeta} WHERE meta_key = %s && meta_value = %s";
    $member_count = $wpdb->get_var( $wpdb->prepare( $sql, \'mepr-address-state\', $atts[0] ) );
如您所见,获取所有行(只有一行)也没有意义,获取所有列(也只有一列)也没有意义。

这是将您从SQL注入中解救出来的转义部分。

但是是的,很可能您还应该在其中进行一些验证,但这取决于该参数的可用值。

相关推荐

Need a help on sanitization

我在评论中有一个主题,我确实在像这样的少数情况下添加了“type”=>“select”部分。$wp_customize->add_setting( \'personal_lite_post_link\', array( \'default\' => \'enable\', \'sanitize_callback\' => \'personal_lite_select_callback\' ) ); $w