是否需要在WP Query中清理$_POST数据?及操作方法
WP Query中$_POST参数的安全处理
必须对$_POST['type']做清理,直接用未过滤的用户输入风险很高——攻击者可能传入恶意值,要么导致查询出错,要么触发SQL注入,甚至能查询到你不想公开的内容。
给你两种靠谱的处理方式:
方式一:用WordPress内置函数过滤
sanitize_key()是专门用来清理这类标识符的函数,它会把输入转换成符合post_type命名规则的格式(小写字母、数字、下划线、短横线),过滤掉所有非法字符:
// 先判断参数是否存在,不存在就用默认的'post' $post_type = isset($_POST['type']) ? sanitize_key($_POST['type']) : 'post'; $args = array( 'post_type' => $post_type ); $query = new WP_Query( $args );
方式二:严格验证合法的post_type
如果想更严谨,可以先验证传入的类型是否是网站已注册的合法post_type,避免查询不存在的类型:
// 获取网站所有已注册的post_type $allowed_post_types = get_post_types(); // 先取参数,默认值设为'post' $post_type = isset($_POST['type']) ? $_POST['type'] : 'post'; // 验证是否在合法列表里,不合法就用默认值 $post_type = in_array($post_type, $allowed_post_types) ? $post_type : 'post'; $args = array( 'post_type' => $post_type ); $query = new WP_Query( $args );
如果你的业务只允许特定几个post_type(比如只允许文章和页面),可以把$allowed_post_types改成自定义数组:
$allowed_post_types = array('post', 'page');
内容的提问来源于stack exchange,提问作者Senje
相关产品推荐
相关产品推荐

