如何安全检查超全局帖子[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);
}
}
是否有更安全的方法来检查发布的变量的类型?
答案 0 :(得分:1)
将isset()
函数与您要执行的任何检查一起使用将使其更加“安全”,因为如果未设置或定义变量或索引,代码不会被破坏。
isset —确定是否设置了一个变量,并且该变量不是NULL
在这方面,您可以按以下方式重写代码:
$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);
}
}
答案 1 :(得分:1)
外部变量的类型将始终为字符串或数组,如http://php.net/manual/en/language.variables.external.php#language.variables.determining-type-of所述:
HTTP是一种文本协议,Superglobal数组中的大多数(如果不是全部)内容(如
$_POST
和$_GET
)将保留为字符串。 PHP不会尝试将值转换为特定类型。
当您针对“字符串”和“数组”类型检查变量时,您处理了所有可能的类型。