You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress短代码中$atts用户输入如何进行消毒与转义处理

WordPress短代码属性的安全消毒与转义方案

短代码的$atts属于用户可控输入,未做处理直接拼接输出会存在XSS跨站脚本注入风险,需按「输入消毒、输出转义」两个环节处理:

1. 输入消毒(Sanitize)

针对不同属性的业务规则,提前过滤非法内容:

  • id属性:场景为YouTube视频ID,仅允许大小写字母、数字、半角减号、下划线,可先用sanitize_text_field做基础过滤,再用正则匹配保留合法字符
  • thumb属性:属于图片URL,使用esc_url_raw校验URL格式,过滤非法协议和恶意字符

2. 输出转义(Escape)

遵循WordPress「迟到转义」原则,所有输出到HTML标签属性的内容,最终输出前统一用esc_attr()转义,将引号、尖括号等特殊字符转换为HTML实体,避免属性逃逸触发注入。

改造后的安全代码

function wp_test_shortcode($atts){
    $atts = shortcode_atts(array(
        'id'    =>  'TESTTEST',
        'thumb' =>  ''
    ),$atts);

    // 消毒用户输入属性
    $atts['id'] = preg_replace('/[^a-zA-Z0-9_-]/', '', sanitize_text_field($atts['id']));
    $atts['thumb'] = $atts['thumb'] ? esc_url_raw($atts['thumb']) : '';

    $thumb = $atts['thumb'] ? $atts['thumb'] : 'https://i3.ytimg.com/vi/'.$atts['id'].'/0.jpg';

    // 输出前转义所有HTML属性值
    return '<div data-id="'.esc_attr($atts['id']).'" data-thumb="'.esc_attr($thumb).'" ></div>';
}
add_shortcode('test','wp_test_shortcode');

内容的提问来源于stack exchange,提问作者Monzur Alam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:09:03