Никогда не стоит доверять вводимым пользователем данным, ибо их некорректность зачастую может привести не просто к ошибке, но в худшем случае и даже к крушению сервера базы данных.
Конечно, ввод некорректных данных не всегда производится с целью взлома сайта. Другой очень частой причиной является просто невнимательность пользователя.
Здесь я опишу методы проверки вводимых данных на корректность.
Длина переменной
Если от пользователя требуется ввести текст не более некоторого количества символов, можно, конечно, задать свойство maxlength у соответствующего input'а, но этот вариант не безопасен, ибо данные могут придти и в обход формы.
Поэтому для этих целей лучше использовать функцию substr:
$variable = substr($HTTP_POST_VARS['variable'], 0, 10);
Адрес Email
Прежде, чем отправлять на указанный пользователем email-адрес какие-либо письма, вмолне целесообразным будет проверить его валидность.
Сделать это можно так:
if(!preg_match("/[a-zA-Z0-9_-.+]+@[a-zA-Z0-9-]+.[a-zA-Z]+/", $email))
die("некорректный email-адрес");
Числовые данные
Если пользователем передаются числовые данные, то перед использованием рекомендуется их проверить на то, действительно-ли они являются числами.
Делается это с помощью функции intval:
$myint = intval($_POST['myint']);
Спецсимволы в строках
Перед вставкой принятых от пользователя строковых данных в БД их следует проверить на наличие спецсимволов, и экранировать их.
Лучше всего для этого использовать функцию mysql_escape_string:
$sql = "INSERT INTO table VALUES \"" . mysql_escape_string($text) . "\"";
PS: Всё это основные методы защиты, которые должны обязательно использоваться при разработке PHP-скриптов. На форуме CodeNet этому вопросу посвящена целая ветка. Если для Вас важна степень защищенности Вашего сайта, то настоятельно рекомендую ознакомиться с этой веткой.
Здравствуйте.
У меня к Вам большая просьба, пожалуйста, поясните — в какое место на странице нужно вставить функцию проверки e-mail на валидность?
Очень нужная деталь, а то задолбали уже липовые ящики при комментировании...
Спасибо, надеюсь на реальную помощь. И, к стати, какой у Вас плагин стоит для preview? Интересная реализация...
В функцию, обрабатывающую POST-данные от Вашей формы для комментария.
Но этот код проверяет только то, действительно-ли введенный в поле текст является email-адресом. Проверить, действительно-ли существует этот адрес он не может.
Проверка, email-адреса на валидность:
$email = explode ('@', $email);
$emailhost = $email[1];
if (!dns_get_mx ($emailhost, $mxhostsarr))
echo 'Invalid email address';