php, защита форм, проверка email
|
Содержание
- Защита данных
- Пример скрипта на php для генерации защитного изображения (captcha)
- Методы POST и GET - принципиальные различия
- Заключение
Защита данных
До сих пор мы защищали PHP скрипт от некорректных данных, переданных из формы. Но так же можно применить и средства, предлагаемые PHP, для защиты форм.
Наверняка многим знакома проблема флуда (для этого обычно используется простая программа, зачастую написанная на том же PHP). Думаю, вам будет не очень приятно обнаружить в своей гостевой книге пару тысяч сообщений, зачастую оскорбительного характера? Самый простой способ решения этой проблемы - небольшая картинка с кодом и поле для ввода этого кода (как на крупных почтовых сервисах). Думаете это очень сложно? Наоборот - это дело 5 минут. Итак, приступим.
Пример скрипта на php для генерации защитного изображения (captcha)
Листинг файла code.php, генерирующего изображение со случайным чисом
<?php
session_start();
$сode=rand(100000,999999);
session_register('сode');
$Image=imageCreateFromPng('code.png');
$color=imagecolorAllocate($Image, 254, 165, 65);
settype($сode,'string');
imageString($Image, 3, 30, 3, $сode, $color);
Header('Content-type: image/png');
imagePng($Image);
imageDestroy($Image);
?>
В файле code.png у нас храниться чистый (или с необходимым фоном) PNG файл размерами 100 на 20 пикселей. Случайное шестизначное число записывается в переменную $code, сохраняется в сессии, и накладывается на картинку. Данную картинку можно вывести в браузер следующим образом:
<img src="code.php" width="100" height="20" title="Код" />
Полее подробно о создании php captcha читайте по ссылке.
Далее в форму добавляем поле, в которое пользователь введет вышеуказанный и генерированный код:
<input type="text" name="code2" />
И далее, после отправки пользователем формы PHP скрипту нам останется сравнить код хранящийся, в сессии ($HTTP_SESSION_VARS['code']), с кодом, переданным пользователем ($HTTP_POST_VARS['code2']) и в случае несовпадения не принимать данные формы и вернуть ее пользователю. Таким образом, программа «флудер» просто не сможет считать код с картинки.
Методы POST и GET - принципиальные различия
Как мы видим из примера нашей формы, данные PHP скрипту передаются методом POST. Обратите внимание на предыдущий абзац: переменная code2 могла бы быть доступна в PHP скрипте под именем $code2, но тогда ее можно было бы передать и методом GET, просто набрав в адресной строке браузера test.php?code2=123456. Чтобы лишить пользователя этой возможности необходимо получать переменные из массива $HTTP_POST_VARS, предварительно проверяя, была ли эта переменная передана методом POST:
if (!isset($HTTP_POST_VARS['code2'])) { действие_если_переменная_не_существует }
Этот момент касается абсолютно всех переменных, передаваемых скрипту методом POST от формы.
Заключение
Вот собственно и все. Теперь ваша форма будет более надежной.
Также хотел бы отметить, что не смотря на большое количество информации в Интернет, о том как защищать ту или иную форму и различными средствами, основная путаница идет именно из-за не знания основ как правильно и где именно требуется употреблять те или иные кавычки. Поэтому настоятельно рекомендую прочитать статью по ссылке о разнице ковычек. Это актуально как для php, так и для javascript.
Также рекомендуется для прочтения как проверяются корректность данных на в форме средствами javascript?