Лучше ли проверять ввод пользователя перед его отправкой на сервер с JS или сервером с PHP? Или, может быть, стоит сделать так, чтобы быть в безопасности?
Я создаю сайт (очень простой на данный момент), который имеет область участников / область администратора / и т. Д. На данный момент у меня есть только пользовательский ввод имени пользователя и пароля, в будущем будет больше (адрес электронной почты, адрес и т. Д.), Но какова наилучшая практика проверки данных?
Я набрасываю на него нагрузку «if … else», пока пользователь не поправит ее? Или, может быть, есть отдельные переменные для каждого введенного пользователем значения и установить его в true или false, если это правильно или неправильно? (например, подтверждение электронной почты, чтобы убедиться, что оно находится в формате электронной почты)
Есть много способов сделать это, но какие из них вы бы предложили? Я не хочу писать 50 строк кода, когда я мог бы выполнить задание в 10 строках … если это имеет смысл: p
Любая помощь будет оценена, спасибо! 🙂
Проверка на стороне сервера является обязательной , проверка на стороне клиента является плюсом .
Если вы используете только проверку на стороне клиента, гнусные люди будут взломать вашу систему, чтобы опубликовать неутвержденные материалы – взломать ваши сценарии и потенциально использовать вашу систему. Это очень плохо с точки зрения безопасности.
Тем не менее, вы должны также включить проверку на стороне клиента, поскольку это намного быстрее, чем поездка туда и обратно, и дает пользователям мгновенную обратную связь. Это позволит вашим пользователям быть счастливыми и заставит их вернуться на ваш сайт.
Поэтому, если это возможно, используйте оба . Если вы не можете / не хотите, то, по крайней мере, делайте это на стороне сервера. Валидация только на стороне клиента – это рецепт катастрофы!
Сделайте оба.
Клиентская сторона дает пользователям отзывчивость, и серверная сторона защищает ваши данные.
Я уверен, что у PHP есть несколько библиотек, которые помогут вам в чем-то вроде того, что делает ASP.NET MVC, чтобы обеспечить способ сделать оба за один шаг.
Проверка безопасности должна обязательно происходить на стороне сервера по соображениям безопасности.
Однако, чтобы избежать отправки запроса на сервер с недопустимыми данными и отправки ответа клиенту, хорошо также иметь проверку на стороне клиента. Это сделает ваш сайт более отзывчивым. Поэтому добавьте проверку на стороне клиента для удобства пользователя.
Проверка, ВСЕГДА на стороне сервера. Я могу вмешиваться в вашу клиентскую сторону формы и заполнять сумасшедшие ценности и все еще проверять. Я не могу вмешиваться в скрипты на стороне сервера.
Поэтому, проверяя клиентскую сторону, вы просто сохраняете мало времени на «разговор» с сервером. Никогда не используйте его для достоверной проверки ваших данных.
Конечно, вы не можете полагаться только на JavaScript, что, если кто-то отключил его? JavaScript должен только сделать сайт более удобным для пользователя и что ему не нужно ждать сервер каждый раз, когда он делает ошибку. Серверная сторона предназначена для вашего использования, чтобы не иметь ошибок в вашей системе!
Вы должны проверить это на стороне сервера. Валидация на стороне клиента является необязательной. Вы можете объявлять типы валидации для полей и создавать общий валидатор для своих форм. Если вы не знаете, что я имею в виду, попробуйте взглянуть на декларативное построение кода AngularJs. Это лучший способ создания форм, также Angular – хорошая и очень быстрая структура для создания форм.
http://docs.angularjs.org/#!/cookbook/advancedform
Посмотрите на следующие строки:
<input type="text" name="form.address.line1" size="33" ng:required/> <br/> <input type="text" name="form.address.city" size="12" ng:required/>, <input type="text" name="form.address.state" size="2" ng:required ng:validate="regexp:state"/> <input type="text" name="form.address.zip" size="5" ng:required validate="regexp:zip"/>
Для вашей серверной части вы также можете определить некоторую структуру, которая будет содержать поля формы, методы проверки и строку ошибок для каждого поля. Затем в цикле проверяйте каждое поле на основе вашей информационной структуры. Вы можете легко управлять формами, созданными таким образом.
Пример в PHP:
Данные формы:
$formData = array ( array( 'ID' => "name", 'validate' => '/.+/', 'label' => 'Your name', 'errorMsg' => "This field is required", 'type' => 'text' ), array( 'ID' => "Phone number", 'validate' => '/^[0-9+ ]+$/', 'label' => 'Numer telefonu', 'errorMsg' => "Please provide proper telephone number", 'type' => 'text' ) );
Генератор валидатора и формы (извините за простой и грязный код здесь):
$s = ''; foreach ($formData as $input){ $s .= sprintf('<label for="%s">%s</label>',$input['ID'],$input['label']); if (isset($_POST[$input['ID']]) && !empty($input['validate']) && !preg_match($input['validate'],$_POST[$input['ID']])){ $error = true; $s .= sprintf('<div class="formErrorValidate">%s</div>',$input['errorMsg']); } if (isset($_POST[$input['ID']])) $htmlMsg = str_replace('%'.$input['ID'].'%',$_POST[$input['ID']],$htmlMsg); if ($input['type'] == 'textarea'){ $s .= sprintf('<textarea name="%s" id="%s">%s</textarea>',$input['ID'],$input['ID'],(isset($_POST[$input['ID']])?$_POST[$input['ID']]:'')); } else { $s .= sprintf('<input type="%s" name="%s" id="%s" value="%s"/>',$input['type'],$input['ID'],$input['ID'],(isset($_POST[$input['ID']])?$_POST[$input['ID']]:'')); }
}