WordPress模板插件定制

您现在的位置是:首页 > WordPress教程WordPress教程

WordPress SQL注入防护

查看 WP集市 的更多文章WP集市 2025-09-10 【WordPress教程】 332人已围观

  1. 咱先唠唠WordPress这玩意儿咋防SQL注入。你得明白,WordPress底层是PHP和MySQL谈恋爱的故事——但要是没搞好,黑客就能在SQL查询里插一嘴乱码,把你数据库搅得天翻地覆。比如你主题里直接写个:

    $query = "SELECT * FROM wp_posts WHERE ID = $_GET['id']";  

    完犊子!用户传个id=1 OR 1=1就能把你所有文章拖走。

  2. 核心防御就仨字:别信用户。所有输入都当毒药处理。WordPress自己提供了$wpdb对象,人家自带金钟罩:

    global $wpdb;  
    $safe_id = $wpdb->prepare("%d", $_GET['id']);  
    $results = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE ID = %d", $safe_id);  

    看见没?%d强制转数字,就算用户输入"DROP TABLE"也给你变成0。

  3. 预处理语句是亲爹。但有时候你非手写SQL不可,那就得用esc_sql()洗一遍:

    $raw_input = "hello'; DELETE FROM wp_users; --";  
    $clean_input = esc_sql($raw_input);  
    // 输出: hello\'; DELETE FROM wp_users; --  

    这波直接给单引号加反斜杠,让SQL引擎把它当普通字符啃。

  4. 插件作者听好了!别用query()直接莽,学学人家用参数化查询:

    $wpdb->query(  
    $wpdb->prepare("UPDATE $wpdb->options SET option_value = %s WHERE option_name = %s",   
    $new_value,   
    'my_custom_option')  
    );  

    %s处理字符串,%d处理整数,跟printf似的但能防注入。

  5. 你以为这就完了?No!二次注入更阴险——比如先从数据库读个带毒的数据,再塞进新查询。所以连从数据库取出来的数据也得用wp_unslash()sanitize_text_field()洗刷刷:

    $dirty_data = get_option('some_tainted_option');  
    $clean_data = sanitize_text_field(wp_unslash($dirty_data));  
  6. 最后整点高阶玩法:用WordPress的Schema API自动建表,它给你字段类型兜底:

    $sql = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}users WHERE user_login LIKE '%admin%'");  

    {$wpdb->prefix}动态换表前缀,就算黑客知道你表前缀叫wp_,咱也能改成wp_42a9x_这种乱码气死他。

  7. 实在不放心?上WAF插件(比如Wordfence)堵漏。但记住,工具是辅助,脑子里的安全意识才是铁壁。好比你知道用$wpdb->insert()比手动拼SQL安全:

    $wpdb->insert(  
    'custom_table',  
    array('column1' => $value1, 'column2' => $value2),  
    array('%s', '%d') // 指定数据类型盾牌  
    );  
  8. 总结一波:永远别用$_GET$_POST直接进SQL;抱紧$wpdb->prepare大腿;不确定的数据全给我用esc_sql()洗一遍。WordPress扛了互联网三分之一的网站,不是因为它绝对安全,而是咱能把它练成金钟罩铁布衫。

(完)

Tags:

WordPress模板插件定制

WP集市

V管理员
文章 723 篇 | 评论 0 次
最新文章