Як говорили інші, ви повинні робити і те, і інше. Ось чому:
Сторона клієнта
Спершу ви хочете перевірити дані на стороні клієнта, тому що ви можете дати кращі відгуки середньому користувачеві . Наприклад, якщо вони вводять недійсну адресу електронної пошти і переходять до наступного поля, ви можете негайно показати повідомлення про помилку. Таким чином користувач може виправити кожне поле перед тим, як подати форму.
Якщо ви підтверджуєте лише сервер, вони повинні надіслати форму, отримати повідомлення про помилку та спробувати усунути проблему.
(Цю біль можна полегшити, якщо сервер повторно надає форму із заповненим оригінальним входом користувача, але перевірка на стороні клієнта все ще швидша.)
Сторона сервера
Ви хочете перевірити його на стороні сервера, тому що ви можете захистити від зловмисного користувача , який може легко обійти ваш JavaScript і надіслати небезпечний вхід на сервер.
Дуже небезпечно довіряти своєму інтерфейсу. Вони не тільки можуть зловживати вашим інтерфейсом, але можуть взагалі не використовувати ваш інтерфейс або навіть браузер . Що робити, якщо користувач вручну редагує URL-адресу або запускає свій власний Javascript, або налаштовує свої HTTP-запити іншим інструментом? Що робити, якщо, наприклад, вони надсилають власні HTTP-запити зі curl
скрипту чи з нього?
( Це не теоретично; наприклад, я працював над пошуковою системою подорожей, яка повторно надсилала пошук користувача багатьом авіакомпаніям-партнерам, автобусним компаніям тощо), надсилаючи POST
запити так, ніби користувач заповнив форму пошуку кожної компанії, потім зібрав і сортував. всі результати. Форма JS цих компаній ніколи не виконувалася, і для нас було вирішальним те, що вони надають повідомлення про помилки у поверненому HTML. Звичайно, API було б непогано, але це було те, що ми повинні зробити. )
Не допускаючи цього, це не тільки наївно з точки зору безпеки, але й нестандартно: клієнту слід дозволити надсилати HTTP будь-якими способами, які вони хочуть, і ви повинні правильно відповісти. Це включає перевірку.
Перевірка на стороні сервера також важлива для сумісності - не для всіх користувачів, навіть якщо вони користуються браузером, буде ввімкнено JavaScript.
Додаток - грудень 2016 року
Існують деякі перевірки, які неможливо виконати належним чином у коді додатка на сервері, і зовсім неможливо в коді клієнта , оскільки вони залежать від поточного стану бази даних. Наприклад, "ніхто інший не зареєстрував це ім'я користувача", або "допис у блозі, який ви коментуєте, все ще існує", або "жодне існуюче бронювання не перекриває вказані вами дати", або "залишок у вашому обліковому записі ще достатньо, щоб покрити цю покупку . " Лише база даних може надійно перевірити дані, що залежать від пов'язаних даних. Розробники регулярно вкручують це , але PostgreSQL надає хороші рішення .