首页 > 解决方案 > 如何安全地检查超全局 POST['key'] 的类型?

问题描述

我怎样才能安全地检查超全球帖子的类型[key]?例如,我有以下代码:

$ufo = false;
if (filter_has_var(INPUT_POST, 'key')) {

    if (is_string($_POST['key'])) { // <- IS THIS SAFE?

        $ufo = filter_input(INPUT_POST, 'key', FILTER_SANITIZE_STRING);

    } elseif (is_array($_POST['key'])) { // <- IS THIS SAFE?

        $ufo = filter_input_array(INPUT_POST, 'key', FILTER_SANITIZE_STRING);

    }
}

有没有更安全的方法来检查发布变量的类型?

标签: php

解决方案


将该isset()函数与您想要执行的任何检查一起使用将使其“更安全”,因为如果未设置或定义变量或索引,您的代码不会被破坏。

isset — 确定变量是否已设置且不为 NULL

PHP 文档

在这方面,您可以按如下方式重写您的代码:

$ufo = false;
if (isset($_POST['key'])) {

    if (is_string($_POST['key'])) { // <- IS THIS SAFE?

        $ufo = filter_input(INPUT_POST, 'key', FILTER_SANITIZE_STRING);

    } elseif (is_array($_POST['key'])) { // <- IS THIS SAFE?

        $ufo = filter_input_array(INPUT_POST, 'key', FILTER_SANITIZE_STRING);

    }
}

推荐阅读