Что и как фильтровать

Что и как фильтровать

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

Далее мы узнали о том, какими средствами может производиться фильтрация, и для этого познакомились с регулярными выражениями PHP и Perl.

В этом разделе мы перейдем к практической части и на примерах увидим, что и как нужно фильтровать.

Запрет определенных символов

Запрет определенных символов

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

Большинство начинающих программистов будет писать регулярное выражение, в котором запрещаются определенные символы, а все остальное будет разрешено.

Опытный программист, нацеленный на безопасность, будет действовать наоборот запрещать все, что явно не разрешено.

Почему безопаснее следовать правилу что не разрешено, то запрещено. Дело в том, что точно запретить все невозможно, и вы обязательно что-то упустите.

Например, вы хотите разрешить использование только HTML -тегов <B>,<I>,<U>. Для этого можно написать регулярное выражение, запрещающее все опасные теги:

$id=ereg_replace («<SCRIPT>|<VBSCRIPT>|<JAVASCRIPT>»,  "", $id);

Но где гарантия, что вы перечислили в регулярном выражении все запрещенные теги? К тому же, Web не стоит на месте, и постоянно появляются щенные теги? 

К  тому же, Web не стоит на месте, и постоянно появляются все новые теги, которые могут стать опасными, а они не перечислены в вашем регулярном выражении.

Намного проще запретить все, кроме явно указанного:

<?php

$str = «<I><STRONG>Hello <B> World<SCRIPT>»;

$str=eteg_replace ("<[A-Z]>{1,}[^BIU]",  "", $str);

print ($str);

?>

В этом примере запрещается любой тег, кроме <B>,<I> и <U>. Если в HTML появится новый тег, то по умолчанию он будет запрещен, пока вы его не добавите в выражение [^BIU] .

Что фильтровать

Что фильтровать

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

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

Давайте разберём каждое из полей и посмотрим, какие символы можно разрешить к вводу:

  • Фамилия, имя и отчество все эти три поля являются текстовыми и могут содержать любые буквенные символы. Все остальное должно быть запрещено. Следовательно, регулярное выражение для этих полей должно выглядеть так.  $str=ereg_replace ([^a-zA-Z]"", "", $str); В данном выражении мы запрещаем все, кроме букв от A до Z в нижнем и верхнем регистре. Таким образом, не нужно перечислять запрещенные символы и молиться, что мы ничего не забыли.
  • Пол ------ может принимать одно из значений мужской или женский. все остальное должно беспощадно обрезаться. Чаще всего пол сокращают до одной буквы М или Ж, поэтому регулярное выражение может выглядеть следующим образом:  $str=ereg_replace ([^МЖ]"", "", $str); В результате все символы, кроме указанных двух букв, будут удаляться из параметра.
  • Дата рождения ------ должно обрезаться всё, кроме цифр и символа точки, которая используется для разделения числа, месяца и года. $str=ereg_replace ([^0-9.]"", "", $str);
  • Возраст ------ это число, а значит, в нем не должно быть ничего, кроме цифр: $str=ereg_replace ([^0-9.]"", "", $str);
  • Примечание ----- это самая сложная переменная, потому что она представляет собой текст, который может ввести пользователь. Как минимум, здесь вы должны запретить любые теги: $str=ereg_replace ([^A-Z.]« {1,}», "", $str);

Теперь поговорим о том, когда нужно производить проверку параметров. На этот вопрос я всегда отвечаю — в самом начале файла сценария.

Ошибка многих программистов состоит в том, что они убирают лишние символы только в момент использования.

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

Чтобы такого не произошло, я всегда очищаю переменные от лишних символов в самом начале сценария.

То есть мой сценарий выглядит следующим образом:

<?php

Убираем потенциально опасные символы из всех переменных, полученных от пользователя

Код сценария

?>

Для того чтобы очистить параметры от всего опасного, я  использую примерно следующий код:

$param = preg_replace («Регулярное выражение», "", $param);

Ну вроде всё объяснил на понятном языке ребята желаю вам удачи в творчестве спасибо что посетили мой блог.

 

Понравилась статья? Поделиться с друзьями:
Блог Измайлова Павла
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: