Как защитить от входных массивов - PullRequest
0 голосов
/ 08 октября 2018

У меня есть программа.Он принимает ввод буквенно-цифровой строки (которую я уже проверяю).Таким образом, допустимый ввод будет www.example.com/myfile.php?input=John1

Однако, если кто-то введет www.example.com/myfile.php?input[], то это нарушит логические разрывы всей моей программы, потому что я не принимаю ввод как массив.Как я могу быть уверен, что пользователь вводит только строку.Не массив, или любые другие типы данных / структуры?

1 Ответ

0 голосов
/ 19 октября 2018

Существует медленный и утомительный способ решения этой проблемы, который включает в себя много ручной проверки типов.Вы можете носить клавиатуру без надписей if (!is_string($foo)) условий во всем приложении.

Или же вы можете использовать Ионизатор , который был разработан для решения именно этой проблемы.

<?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, который вы затем можете перехватить, зарегистрировать и завершить с ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...