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

修改使用$_REQUEST的PHP代码,替换为更安全的实现方案

替换$_REQUEST的安全优化方案

原代码依赖$_REQUEST判断请求参数,存在数据来源不明确的安全风险,结合这个接口是**销售数据回传(POST场景)**的业务属性,直接用$_POST替换并增强校验,修改后的代码如下:

public static function sales_data_postback() {
    // 1. 先校验请求方法,只允许POST请求
    if ( $_SERVER['REQUEST_METHOD'] !== 'POST' ) {
        wp_die( 'Invalid request method.' );
    }

    // 2. 替换$_REQUEST为$_POST,明确数据来源是POST
    if ( ! isset( $_POST['sales_data'] ) || empty( $_POST['sales_data'] ) ) {
        return;
    }

    // 3. 解码JSON前先检查字段是否存在,解码后校验结果
    if ( ! isset( $_POST['data'] ) || ! isset( $_POST['cart_contents'] ) ) {
        return;
    }

    $data = json_decode( stripslashes( $_POST['data'] ) );
    $cart_contents = json_decode( stripslashes( $_POST['cart_contents'] ) );

    // 校验JSON解码是否成功
    if ( ! $data || ! $cart_contents ) {
        return;
    }

    // 保留原业务逻辑:移除购买日志ID,插入新记录
    $data = (array) $data;
    unset( $data['id'] );

    $purchase_log = wpsc_get_order( $data );
    $purchase_log->save();
    $purchase_log_id = $purchase_log->get( 'id' );

    global $wpdb;

    // 处理购物车内容,增加产品查询的容错处理
    foreach ( $cart_contents as $cart_item ) {
        // 先校验cart_item的slug是否存在
        if ( empty( $cart_item->slug ) ) {
            continue;
        }

        $product_query = new WP_Query( array( 
            'post_type' => 'wpsc-product', 
            'pagename' => $cart_item->slug,
            'posts_per_page' => 1 // 只取一条结果,提升效率
        ) );
        
        $products = $product_query->get_posts();
        // 没找到对应产品就跳过当前条目,避免报错
        if ( empty( $products ) ) {
            continue;
        }

        $product = $products[0];
        $cart_item = ( array ) $cart_item;

        unset( $cart_item['id'] );
        unset( $cart_item['slug'] );

        $cart_item['prodid']     = $product->ID;
        $cart_item['name']       = $product->post_title;
        $cart_item['purchaseid'] = $purchase_log_id;

        $wpdb->insert( WPSC_TABLE_CART_CONTENTS, $cart_item );
    }

    wp_die(); // 用WordPress的wp_die替代原生die,更符合WP生态规范
}

关键改动说明

  • 明确请求类型:新增REQUEST_METHOD校验,只允许POST请求访问,拦截GET等非法请求
  • 替换$_REQUEST为$_POST:直接指定数据来源是POST提交的参数,避免GET参数触发业务逻辑,消除数据来源模糊的风险
  • 增强数据校验:增加JSON字段存在性检查、解码结果校验,避免无效数据导致后续逻辑报错
  • 容错处理:对产品查询结果做空值判断,没找到对应产品时跳过当前条目,防止数组越界错误
  • 规范WP用法:用wp_die()替代原生die(),更符合WordPress开发规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:26:07