Подтвердить что ты не робот

Почему проверка на стороне клиента недостаточно?

Я видел здесь, что:

Как вы, наверное, уже знаете, полагаясь только при проверке на стороне клиента очень плохая идея. Всегда выполнять правильная проверка на стороне сервера как хорошо.

Не могли бы вы объяснить, почему проверка на стороне сервера является обязательной?

4b9b3361

Ответ 1

Проверка на стороне клиента - я предполагаю, что вы говорите о веб-страницах здесь - полагается на JavaScript.

Проверка работоспособности JavaScript может быть отключена в пользовательском браузере, сбой из-за ошибки сценария или злобный обход без особых усилий.

Кроме того, весь процесс подачи формы может быть фальсифицирован.

Таким образом, никогда не гарантируется, что то, что поступает на сервер, это чистые и безопасные данные.

Ответ 2

В письменном приложении сервера есть простое правило: Не доверять пользовательским данным.

Вы всегда должны предполагать, что злоумышленник обращается к вашему серверу так, как вы не намеревались (например, в этом случае через ручной запрос через curl вместо предполагаемой веб-страницы). Например, если ваша веб-страница пытается отфильтровать SQL-команды, у злоумышленника уже есть хороший намек на то, что он может быть хорошим вектором атаки для ввода ввода с помощью команд SQL.

Ответ 3

любой, кто знает базовый javascript, может обойти клиентскую сторону.

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

Ответ 4

Клиент, с которым вы разговариваете, возможно, не является клиентом, с которым, по вашему мнению, вы разговариваете, поэтому он может игнорировать любую проверку, которую вы просите.

В веб-контексте не только возможно, что пользователь может отключить javascript в своем браузере, но также существует вероятность, что вы вообще не разговариваете с браузером - вы можете получить форму отправки от бота который отправляется на ваш URL-адрес отправки, даже не увидев форму вообще.

В более широком контексте вы можете иметь дело с взломанным клиентом, который отправляет данные, которые никогда не будет делать реальный клиент (например, целевые боты для игр FPS) или, возможно, даже полностью пользовательский клиент, созданный кем-то, кто обратный ваш проводной протокол, который ничего не знает о какой-либо проверке, которую вы ожидаете от него.

Ответ 5

Не будучи специфичным для Javascript и веб-клиентов и более широко решать проблему, сервер должен нести ответственность за сохранение своих собственных данных (в сочетании с базовыми базами данных).

В клиент-серверной среде сервер должен быть готов к тому факту, что с ним можно было бы поговорить о различных реализациях клиента. Рассмотрим систему торговли. Клиентами могут быть графические интерфейсы (например, системные входные данные) и (скажем) клиенты для загрузки данных (загрузка нескольких сделок из CSV файлов).

Проверка клиента может выполняться разными способами, а не все правильно. Следовательно, сервер не должен обязательно доверять данным клиента и выполнять проверки целостности и проверку подлинности.

Ответ 6

В случае, если злоумышленники публикуют свою собственную форму.

Ответ 7

Вы можете отключить/изменить JavaScript.

Ответ 8

Поскольку пользовательский агент (например, браузер) может быть подделкой. Создание пользовательского приложения для создания HTTP-запроса с произвольными заголовками и контентом очень просто. Он может даже сказать, что это настоящий браузер, вы не можете сказать разницу.

Все, что вы можете сделать, это посмотреть содержимое запроса, и если вы его не проверите, вы не знаете, что оно действительно.

Ответ 9

Проверка на стороне сервера является обязательной, поскольку проверка на стороне клиента не гарантирует, что на сервере будут поступать неатифицированные данные.

Проверка на стороне клиента недостаточна, поскольку ее объем действия очень ограничен. Проверка выполняется только в пользовательском интерфейсе браузера.

Веб-сервер "прослушивает" и получает HTTP-запрос, содержащий данные из браузера, а затем обрабатывает его.

Злонамеренный пользователь может отправлять вредоносные HTTP-запросы разными способами. Браузер даже не требуется.

Валидация на стороне клиента, выполняемая с использованием JavaScript, в браузере, является важным удобством использования, улучшением пользовательского интерфейса. Но он не предотвращает отправку вредоносных данных пользователем, который знает, как обойти поведение браузера по умолчанию для построения HTTP-запроса, который будет отправлен на сервер. Это можно сделать легко с некоторыми плагинами браузера, используя cURL и т.д.

Ответ 10

В целом, это лучше всего для КАЖДОГО фрагмента приложения, чтобы сделать его собственной проверкой/проверкой.

Проверки на стороне клиента хороши для максимизации пользовательского опыта и ускорения обратной связи с клиентом, что им нужно что-то исправить, и уменьшить количество проблем, возникающих при проверках на стороне сервера.

Затем на каждой главной точке перехода на серверном коде вам также должны быть проверки. Проверьте входы кода приложения, предпочтительно с помощью подтверждения ввода белых списков, а затем какие-либо взаимодействия с базой данных используют параметризованные запросы для дальнейшего обеспечения проблем.

Ответ 11

Вы должны выполнить проверку на стороне сервера на любых данных, которые, если они недействительны, могут быть вредными для любого, кроме объекта, проводящего данные. Валидация на стороне клиента может быть подходящей в тех случаях, когда недействительные данные не будут иметь вредных последствий для кого-либо, кроме лица, проводящего его. Если вы не можете быть уверены в том, что плохие последствия от плохих данных не будут распространяться за пределы публикации объекта, вы должны использовать проверку на стороне сервера, чтобы защитить себя от вандалов или других клиентов-изгоев.

Ответ 12

Клиентская проверка выполняется для сохранения клиентом неправильных данных. Проверка на стороне сервера предназначена для сохранения сервера от обработки неправильных данных. При этом он также вводит некоторую безопасность в процесс подачи.

Ответ 13

Валидации на стороне клиента предполагают безопасный браузер, язык на стороне клиента или HTML 5. Все эти элементы могут быть отключены, частично непригодны или просто не реализованы. Ваш сайт должен использоваться от каждого человека, с каждым браузером. Языки на стороне сервера более безопасны, и, если они не являются ошибками, проверка будет безопаснее и правильнее.

Ответ 14

Бадди, предположим, что если человек перевернул javascript в своем браузере, проверка стала мертвой. Затем, если он отправит некоторый сокровенный контент через эту форму на серверную сторону. Это приведет к серьезным уязвимостям, таким как SQL-инъекция или xss или любые другие проблемы. Поэтому будьте осторожны, если вы собираетесь внедрить валидацию JavaScript на стороне клиента.

Спасибо