Валидация форм

boot

Новичок
Валидация форм

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

darkwiz

Новичок
1. Составить регулярное выражение, которое проверит все на запрещенные символы. Можно в нем же проверить длину сообщения. Я обычно делаю отдельный модуль, где храню все подобные регулярные выражения.
2. Соответственно if().... где и проверяешь можно ли пришедшее сообщение добавлять.
 

Marquis

Новичок
darkwiz
только я бы еще добавил что все проверки как правило нужно проводить средствами JS, а у php по определению совсем другие задачи.
Всегда не понимал смысл в прверке емаила средствами php от которой пользы 0, но требует дополнительных ресурсов, на туже передачу данных серверу.
 

MadGreen

meninweb
Marquis другими словами выключив js я смогу заслать тебе все что захочу?
и какие задачи у пхп?
 

Marquis

Новичок
Проверить включен ли JS проблем не состовляет, те у ково JS все же отключен (я таких пока не встречал) идут лесом.
>>> и какие задачи у пхп?
Ну точно не валидация емаилов и подобной хрени, а вот проверить доступность домена (в том случае если не планируется валидация емаила обратным письмом) указанного в маиле гораздо интереснее.
 

MadGreen

meninweb
то есть все те кто попытаются сломать твой сайт "идут лесом"?
 

AmadMike

Новичок
Ага, те кто пытаются ломать сайт идут лесом - спокойно говорят скрипту что у них включен JS и отсылают в форму все что захотят.
Логичнее всего делать двойную проверку, только уже на php не выводить замечания а просто отправлять что-то типа hacking attempt :) или просто - произошла ошибка в работе скрипта, информация направлена администратору.
 

Marquis

Новичок
то есть все те кто попытаются сломать твой сайт "идут лесом"
Если руки прямые то подобных проблем не возникает.

Логичнее всего делать двойную проверку, только уже на php
Да ну нафик, лучше уж сразу тройную, на Перле например, так вообще никто не прорвется ;)
 

denver

?>Скриптер
Изначально (первично) проверку надо делать на сервере, по определению, на клиента надеяться это моветон. Если не нравится дублировать проверки, то JS проверка - кандидат номер 1 на удаление. Т.к. без JS проверок сервер не пострадает, а без php проверок может вполне. рюшечка - это JS, а не php.
 

MadGreen

meninweb
Marquis и как, позволь узнать, с прямыми руками без обработки request переменной избежать подобных проблем?
 

Marquis

Новичок
Изначально (первично) проверку надо делать на сервере, по определению
по какому определению?

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

master_x

Pitavale XXI wieku
boot
не слушай Marquis, глупости он говорит, а "большие дяди" его еще и переубедить пытаются...
проверку данных надо делать на сервере в первую очередь! использование JS-валидации -- плюс для юзабилити бэкэнда (плюс кстати необязательный).
еще кто-то тут про регулярки говорил для проверки данных... есть еще специальный набор функций для базовых проверок, описание здесь [m=ctype]ctype[/m]. Работает быстре чем regexp, вероятность совершить ошибку в способе проверки данных -- нулевая.
 

hermit_refined

Отшельник
Marquis
я бы на вашем месте срочно кинулся переделывать свои скрипты.
это аксиома - вне зависимости от формы на странице и навешенного на неё js, скрипту на сервере могут переслать всё что угодно, хоть чёрта с рогами.
 

tf

крылья рулят
Проверить включен ли JS проблем не состовляет, те у ково JS все же отключен (я таких пока не встречал) идут лесом.
наивный
Изначально (первично) проверку надо делать на сервере, по определению
по какому определению?
Marquis, изначально ты проверяеш правильность данных.
JS тебя никак не оградит от получения тобой невалидных данных
 

AmadMike

Новичок
когда я полностью уверен в том что полученная информация является полностью корректной в соответствии с требованиями системы
Как это интересно ты можешь быть полностью уверен?
Ну самый банальный пример, тут даже проверки JS не надо делать (неверные данные не даст передать браузер): есть select со списком городов, каждому городу присвоен уникальный id. Каким ты образом можешь быть уверен что я не передам тебе несуществующий id?
Конечно в данном примере особой опасности может и не быть, т.к. при запросе скажем в базу данных по данному id не будет выведено ни одного города... Но ситуации могут быть и другие, когда после принятия неверных данных может быть угроза для безопасности сайта.
 

Marquis

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

когда после принятия неверных данных может быть угроза для безопасности сайта
угроза для чего?
 

boot

Новичок
есть такой кусок кода

<?php
if(isset($_POST['reg'])) {
$id=$_POST['id'];
$name=$_POST['name'];
$email=$_POST['email'];
$mesage=$_POST['mesage'];

if(trim($name)==''){
die("Вы не ввели имя !");
}
if(strlen($name)<5) {
die("Имя должно быть не мение 5-и символов !");
}

if(trim($email)=='') {
die("Вы не ввели ваш EMAIL!");
}

if (!preg_match("/^[a-zA-Z0-9_\-.]+@(?:[a-zA-Z0-9_]{1,3})
+\.[a-zA-Z0-9_]{1,3})+(\.[a-zA-Z0-9_]{1,3})*/",$email)){
die("Ошибочный формат EMAIL-адресса !");
}


$dbhost ="localhost ";
$dbuser ="root";
$dbpassword ="root";
$dbname ="db";
$link = mysql_connect($dbhost, $dbuser, $dbpassword);

if(!$link) die("Не могу соедеится с MySQL");
mysql_select_db($dbname) or die("Не могу открыть $dbname: ".mysql_error());

$query = "insert into guest_book values ('$id', '$name', '$email', '$mesage')";
$result = mysql_query($query, $link) or die(mysql_error());


?>
после проверки ввыводит следующее

syntax error, unexpected $end in /localhost

чего я пропустил ?
 
Сверху