Gaist-Endruy
( off
)
* (
10:03 12-04-2009
)
Эти два свойства класса объявлены статическими для того, что бы иметь к ним доступ из любого места нашего приложения, и при этом гарантировать неизменность находящихся в них данных. Напомню, статические члены класса не нужно создавать вызывая конструктор класса (new) и они доступны в любом месте приложения (некий аналог суперглобальных массивов).
[цит] Gaist-Endruy
( off
)
* (
10:03 12-04-2009
)
Теперь давайте возьмемся за методы класса. Их тоже будет два по числу наших массивов.
[цит] Gaist-Endruy
( off
)
* (
10:03 12-04-2009
)
<?php
final class protection {
static public $$_get;
static public $$_post
static public post_decode(){
}
static public get_decode(){
}
}
?>
[цит] Gaist-Endruy
( off
)
* (
10:04 12-04-2009
)
Методы у нас опять же статические. Специально для того, что бы избежать вызова конструктора класса.
[цит] Gaist-Endruy
( off
)
* (
10:04 12-04-2009
)
Посмотрим внимательно на информацию, передаваемую методом GET. Выглядит передача информации следующим образом - ?name=namemode=1.... и так далее. То есть данный массив представляет собой простой набор пар ключ-значение. Значит, мы можем обойти массив, перенося данные в другой массив и при этом проверяя данные...
[цит] Gaist-Endruy
( off
)
* (
10:05 12-04-2009
)
static public get_decode(){
foreach($$_GET as $$key=>$$value){
$$key=htmlspecialchars($$key);
if(is_string($$value)){
$$value=htmlspecialchars($$value);
self::$$_get[$$key]=$$value;
}elseif(is_int($$value)){
$$value=(int)$$value;
self::$$_get[$$key]=$$value;
}
}
$$_GET=array();
}
[цит] Gaist-Endruy
( off
)
* (
10:05 12-04-2009
)
В данном случае, для примера, защита данных была осуществлена функцией htmlspecialchars(), которая преобразует все символы способные причинить вред приложению в их символьное представление. В подавляющем большинстве случаев этого вполне достаточно. Но естественно, в случае, когда необходима более надежная защита, используйте регулярное выражение или комбинацию из нескольких защитных функций.
[цит] Gaist-Endruy
( off
)
* (
10:06 12-04-2009
)
Поверте, безопасность стоит потраченных на проверку данных ресурсов системы. Обратите внимание, в конце функции мы заполнили массив GET пустым массивом. Попросту говоря, стерли его. Сделали мы это для того, что бы если по каким-то причинам (например, забыли, или подключили старый код...) мы случайно обратимся к этому массиву, не отфильтрованные данные все равно не попадут в наше приложение.
[цит] Gaist-Endruy
( off
)
* (
10:07 12-04-2009
)
Теперь посмотрим на проверку массива данных POST. Этот массив гораздо сложнее. Теоретически, это многомерный массив с неограниченной вложенностью. На практике мне никогда не приходилось сталкиваться с необходимостью передавать методом post более чем двух мерные массивы данных. И если такое придется делать Вам, то наверное стоит задуматься над вопросом, как можно упростить приложение.
[цит] Gaist-Endruy
( off
)
* (
10:07 12-04-2009
)
Итак: Примем допущение, что массив будет самое большее двухмерным. И попробуем реализовать функцию проверки массива.
[цит]