Веб программирование

Функции для фильтрации передаваемых GET данных

 
 

Здравствуйте, я вам решил показать пример функций которые будут фильтрировать входящие данные GET. И так преставим, что мы разрабатываем сайт на PHP и MySQL и не хотим что бы сайт ломали, для этого нам нужно написать пару функций.

Главная функция которые будет фильтрировать

Имя функции мы дадим filter

далее пишем переменные которые будут передавать параметры нашей функции

переменная $data будет передавать текст который будет фильтрироватся

переменная $type будет передавать параметр string или int для определения какой текст мы будем фильтрировать

string - это любой текст будь то буквы или цифры или все и сразу

По дефолту функция понимает что входящий тект это просто строка с буквами и цифрами

<?

function filter($data,$type='string'){

// Определяем тип

if($type == 'string'){

// Защита от SQL-Injections

$result = mysql_real_escape_string($data); // функция для экранирования символов используемых в SQL-запросах

// Защита от XSS

$result .= htmlentities($result,ENT_QUOTES,'UTF-8'); // Функция которая преобразует двойные и обычные ковычки в символы соответствующие HTML $result .= htmlspecialchars($result); // Функция которая преобразует символы типо < > & и ковычки так же в символы соответствующие HTML $result .= trim($result); // функция которая вырезает пробелы перед начало строки и в конце строки

} else {

//с помощью функции is_numeric() проверяем действительно ли это цифры

if(is_numeric($data)){

$result = (int)$data;

$result .= abs($result);

} else {

// Выдаем ошибку если этот текст не является цифрами

$result = 'This text is not numeric!';

}

}

// Выводим отфильтрированный текст

return $result;

}

?>

Вот и написали одну функцию которая будт фильтрировать данные

Теперь для упрощения использования этой функции для переменной $_GET

1. Функция будет для переменной $_GET

Имя функции мы дадим get

Далее пишем переменные которые будут передавать параметры этой функции

переменная $key передает функции ключ переменной $_GET Переменная $type собственно нужна для передачи параметров текста функции filter переменная $default_value нужна для того что бы можно было указать значение какой текст будет выводить функция если $_GET передаетсяпустой, по дефолту эта переменная ничего не передает

<?

function get($key,$type='string',$default_value=NULL){

$get = (isset($_GET[$key]) ? $_GET[$key] : $default_value); // Этой переменной мы отпределяем активна ли переменная $_GET по ключу $key и в соответсвии от состояния переменной выводим текст

$result = filter($get,$type); // обрабатываем текст

return $result;

}

?>

вот функциия для фильтрации данных get готова, но как же ее использовать?Эту функцию можно использовать так:

$parameters = get('id','int',1);

таким образом мы говорим функции, что если $_GET['id'] будет активна то ее нужно проверять как числовую, а если не активна значит даем стандартное значение 1

Пример GET запроса

http://domain/script.php?id - Правильный запрос и выдаст 1

http://domain/script.php?id=2312 - Правильный запрос и выдаст 2312

http://domain/script.php?id=text - Не правильный запрос и выдаст ошибку

$parameters = get('sort');

таким образом мы говорим функции, что если $_GET['sort'] будет активна то ее нужно проверять как текстовую, а если не активна значит даем стандартное значение null

Пример GET запроса

http://domain/script.php?sort - Правильный запрос и ничего не выдаст

http://domain/script.php?sort=string - Правильный запрос и выдаст string

http://domain/script.php?sort=string51 - Правильный запрос и выдаст string51

Если в GET запросе передавать к примеру ', `admin` = '5 то SQL запрос будет обработан как обычный текст и SQL иньекции не будет на сайт.

Если в GET запросе передавать к примеру "> то XSS запрос будет обработан как обычный текст и XSS атаки не будет на сайт.





    


Есть вопросы? Спроси на нашем форуме!!
Edward300 [08.03.2014 20:03]

Кто сможет оформить статью?

DIGIUS470 [12.05.2014 22:23]

sir4uk, оформите статью как подобает, думаю html тегами code вы пользоватся умеете.



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.