PHP: отфильтровать мои поля ввода - PullRequest
1 голос
/ 11 января 2011

Как я могу отфильтровать мои поля ввода .. такие как входящие $ _POST, $ _GETs и т.д ..

Я использую подготовленные операторы с PDO, поэтому я просто передаю $ _POST непосредственно в PDO (невыполнение mysql_real_escape_string).

Но, например, я передаю переменную $ _POST в $ _SESSION и сейчас я делаю это напрямую, но не должен ли я каким-то образом фильтровать это?PDO только для базы данных, а как насчет "общего"?

Ответы [ 4 ]

0 голосов
/ 11 января 2011

Попробуйте ввести данные, такие как

'"'

Если ваш код ломается, вы знаете, что ваш ввод необходимо отфильтровать.

С помощью регулярных выражений вам также может помочь фильтрация по алфавиту и цифрам.

На всех форумах или в статьях говорится, что подготовленное утверждение не содержит SQL-инъекций.

Но я думаю, что если вы не сделаете правильно подготовленное заявление, оно сломается.

Если вы используете SP, проверьте это тоже.

0 голосов
/ 11 января 2011

Может быть, вам это нравится. Не идеально, но это хорошо.

  function clear($data)
    {

        $data = addslashes($data);
        $data = strip_tags($data);
        $data = mysql_real_escape_string($data);
        $bir = array('/\//', '/\^/', '/\./', '/\$/', '/\|/', '/\(/', '/\)/', '/\[/', '/\]/',
            '/\*/', '/\+/', '/\?/', '/\{/', '/\}/', '/\,/');
        $iki = array('\/', '\^', '\.', '\$', '\|', '\(', '\)', '\[', '\]', '\*', '\+', '\?',
            '\{', '\}', '\,');
        $data = preg_replace($bir, $iki, $data);
        return $data;

    }

// USAGE
clear($_GET[]) or clear($_POST[])

Кроме того, вы должны проверять переменные с помощью функций is_numeric, is_boolen, is_string.

0 голосов
/ 11 января 2011

Пока вы фильтруете любой вывод из $_SESSION, вам не нужно фильтровать его перед настройкой.Хороший способ запомнить фильтр - это простое соглашение об именовании raw_:

$_SESSION['raw_val'] = $_POST['val'];

Таким образом, вы сохраняете значение для дальнейшего использования, когда вам может понадобиться отфильтровать значение другим способом.:

$_SESSION['filter1_val'] = applyFilter1($_SESSION['raw_val']);
$_SESSION['filter2_val'] = applyFilter2($_SESSION['raw_val']);

Конечно, было бы неплохо проверить размер из $_POST['val'], чтобы не хранить большие объемы данных в сеансах.

0 голосов
/ 11 января 2011

Вы также должны проверить правильность данных.

Так что, если вы вставляете целое число, сначала проверьте его с помощью is_numeric().

Если вы ожидаете адрес электронной почты, убедитесь, что он соответствует регулярному выражению электронной почты.

Вы всегда должны делать такие проверки для данных, которые вы вставляете в базу данных.

После проверки данных для вставки в БД вы можете безопасно использовать их в сеансе.

Это поможет предотвратить атаки XSS и сохранить ваши данные в чистоте.

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