如何防止输入数组

时间:2018-10-08 07:44:12

标签: php security get

我有一个程序。它接受字母数字字符串的输入(我已经检查过)。 因此有效的输入应为www.example.com/myfile.php?input=John1

但是,如果有人输入www.example.com/myfile.php?input[],那么它将中断整个程序的逻辑中断,因为我不接受输入作为数组。我如何才能确定用户输入的内容仅仅是一个字符串。不是数组,还是其他任何数据类型/结构?

1 个答案:

答案 0 :(得分:0)

解决此问题的方法缓慢而乏味,其中涉及大量的手动类型检查。期望在整个应用程序中用键盘写if (!is_string($foo))条件。

或者您可以使用专为解决此确切问题而设计的Ionizer

<?php

use ParagonIE\Ionizer\GeneralFilterContainer;
use ParagonIE\Ionizer\Filter\{
    StringFilter,
    WhiteList
};

// Define properties to filter:
$ic = new GeneralFilterContainer();
$ic->addFilter(
        'username',
        (new StringFilter())->setPattern('^[A-Za-z0-9_\-]{3,24}$')
    )
    ->addFilter('passphrase', new StringFilter())
    ->addFilter(
        'domain',
        new WhiteList('US-1', 'US-2', 'EU-1', 'EU-2')
    );

// Invoke the filter container on the array to get the filtered result:
try {
    // $post passed all of our filters.
    $post = $ic($_POST);
} catch (\TypeError $ex) {
    // Invalid data provided.
}

如果有人尝试传递数组而不是字符串,则$ic($_POST)会抛出一个TypeError,然后您可以优雅地捕获,记录并失败。