如何清理$_REQUEST对象以符合WordPress的PHPCS代码规范?
清理$_REQUEST对象以符合WordPress PHPCS标准
PHPCS报错的核心原因是直接将未经过滤的超全局变量$_REQUEST['bulkcheck']赋值给中间变量,违反了WordPress的安全规范。解决关键是避免直接引用未过滤的超全局变量,直接在安全流程中处理请求参数,同时补上类型验证确保数据合法性。
修改后的代码如下:
if ( ( isset( $_REQUEST['action'] ) && 'delete' === $_REQUEST['action'] ) || ( isset( $_REQUEST['action2'] ) && 'delete' === $_REQUEST['action2'] ) ) { $nonce = isset( $_REQUEST['delete_bulk'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['delete_bulk'] ) ) : ''; if ( wp_verify_nonce( $nonce, 'delete_bulk' ) ) { $bulkcheck = array(); // 先验证参数是数组类型,再处理 if ( isset( $_REQUEST['bulkcheck'] ) && is_array( $_REQUEST['bulkcheck'] ) ) { // 直接对整个请求数组做unslash,再遍历清理每个元素 foreach ( wp_unslash( $_REQUEST['bulkcheck'] ) as $key => $val ) { // 如果是ID类整数参数,可替换为absint()做更严格的数值清理 $bulkcheck[ $key ] = sanitize_text_field( $val ); } } $this->quotes_delete_bulk( $bulkcheck ); header( 'Location: ' . get_bloginfo( 'wpurl' ) . '/wp-admin/admin.php?page=My-Plugin' ); } else { $this->msg = $this->nonce_error(); } }
关键优化说明:
- 新增
is_array( $_REQUEST['bulkcheck'] )验证,防止非数组类型导致遍历错误,同时满足PHPCS的安全校验要求 - 直接遍历经过
wp_unslash()处理的请求数组,避免将未过滤的超全局变量赋值给中间变量 - 提前初始化
$bulkcheck为空数组,避免后续调用方法时出现未定义变量的问题 - 根据参数实际类型选择清理函数:若
bulkcheck存储的是整数ID,用absint()替代sanitize_text_field()能实现更精准的数值过滤
内容的提问来源于stack exchange,提问作者oooorgle
相关产品推荐
相关产品推荐

