[Image] Воскресенье, 22.12.2024, 19:53 [Image]
SEO, технологии, игры, IT новости
[Image] Главная Регистрация Вход [Image]
[Image] Приветствую Вас, Гость · RSS [Image]
Меню сайта

Форма входа
 Блог
Главная » 2011 » Январь » 15 » Функция validate ()
18:17
Функция validate ()
После отправки формы нужно убедиться в правильности данных, проверив все цифровые подписи. Для того чтобы это сделать, необходимо создать функцию validate ().
 Эта функция имеет следующий синтаксис:
validate($input, $secret) где $ input является ссылкой на соответствующий суперглобальный массив ($_GET, $_POST и так далее), $secret представляет секретную строку, используемую для генерации подписи (в данном случае, строку определенную как PROTECTED_KEY). В отличие от protect (), которая является довольно простой функцией, функция validate () гораздо сложнее по нескольким причинам. Во-первых, должно быть выполнено несколько различных проверок, для того чтобы предусмотреть все возможные попытки злоумышленника манипулировать данными, включая (но не ограничиваясь) следующие:
• Изменение одного или нескольких защищенных значений.
• Изменение одной или нескольких защищенных подписей.
• Удаление одного или нескольких защищенных значений или подписей.
Чтобы определить, удалял или изменял пользователь защищенные значения, функция validate () должна знать, какие значения предполагалось защищать. Для этого функция validate () ищет скрытые объекты (и их контрольные суммы), атрибут NAME которых является protected_list. Значение этого скрытого элемента является сериализованным массивом, содержащим имена защищенных ключей. Если этот параметр не найден, функция validate () проверяет все параметры за следующими исключениями:
• Если элемент формы имеет имя submit.
• Если имя элемента формы оканчивается на checksum.
НА ЗАМЕТКУ
Если вас удивляет то, что функция v a l i d a t e d во время проверки игнорирует элементы формы с именем submit, имейте в виду, что это происходит, когда форма обрабатывается тем же сценарием, который ее отображает. В таком случае в форму часто включается скрытый элемент с именем "submit", чтобы дать понять сценарию, что тот должен обработать форму, а не отображать ее.
В большинстве случаев потребуется создать список полей, которые считаются защищенными. Для этого создается массив, содержащий список имен защищенных элементов, который затем сериализируется, после чего список защищается с использованием ранее рассмотренной функции protect (): $protected = serialize(array('myvarl', 'myvar2', 'myvar3')); echo protect ('protected_list', $protected, PROTECTED_KEY);
Для того чтобы избежать повторения и неразберихи в описании функции validate (), ее полное определение представлено в листинге 15.4. При рассмотрении работы этой функции мы будем постоянно ссылаться на этот листинг.
Листинг 5.4. Функция validate ()
<?php
function validate($input, $secret) {
if(!is_array($input)) {
return false;
}
if (!isset($input['protected_list']) SS
!isset ($input['protected_list_checksum'])) {
foreach ($input as $key=>$val) {
if(!preg_match("/(submit|_checksum$)/i", $key)) {
$protected[] = $key;
}
}
} else {
if(!isset($input['protected_list']) II
!isset($input['protected_list_checksum'])) {
return false;
}
$checkval = 'protected_list' .
stripslashes(urldecode($input['protected_list'])) .
PROTECTED_KEY;
$checksum = md5($checkval);
if($checksum !== $input['protected_list_checksum']) (
return false;
}
$protected = unserialize(stripslashes(urldecode(
$input [ 'protected_list' 1))).;
}
foreach($protected as $val) (
if (isset ($input[$val."_checksum"]) && isset($input[$val])) {
$temp = urldecode($input[$val]);
$checksum = md5($val.stripslashes($temp).PROTECTED_KEY);
if($checksum != $input[$val."_checksum"]) {
return false;
}
} else {
return false;
retprn true;
Когда функция validate () вызывается, ее первая задача — убедиться, что переменная $ input действительно является массивом. На следующем шаге функция определяет, какие поля нужно проверять. Определив это, функция ищет правильный (по контрольной сумме) элемент p r o t e c t e d l i s t в массиве $input. Если этот элемент найден и соответствует своей М1)5-подписи, массив реконструируется с использованием функции unserialize (). В случае, если элемент protected_list не содержится в данных формы, для динамического создания массива используется простое стандартное выражение по правилам, рассмотренным ранее. В противном случае переменная $protected заполняется элементами массива $input для выполнения проверки. Массив $protected, содержащий теперь список элементов, подлежащих проверке, подвергается итерационной процедуре с использованием оператора foreach. Функция validate О для каждого элемента проверяет наличие самого элемента и его подписи.
Если оба элемента существуют, то для переданного элемента вновь генерируется МВБ- подпись и сравнивается с подписью, сформированной при передаче формы. Если подписи идентичны, подтверждается правильность элемента, и сценарий обрабатывает следующий элемент. Если на каком-нибудь шаге элемент окажется неверным или отсутствующим, функция validate () возвращает false. После завершения проверки всех элементов функция validate)) возвращает true.
Категория: Все о PHP | Просмотров: 1810 | Добавил: witkom8382 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2024
Категории
Оптимизация сайта [592]
Создание сайтов [355]
Заработать в интернете [508]
Технологии [48]
Полезное [392]
Услуги и сервисы [317]
Автоблог [105]
Скрипты для Ucoz [39]
Движок на сайт [10]
Все о Joomla и Drupal [20]
Все о PHP [91]
Поиск
Пользовательский поиск
Статистика


Онлайн всего: 6
Гостей: 6
Пользователей: 0
Seo сайт, технологии продвижения, мета теги, оптимизация сайтов, новости сео, Скрипты, Ucoz

Рейтинг@Mail.ru