Почему проверки на стороне клиента недостаточно? - PullRequest
39 голосов
/ 14 августа 2010

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

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

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

Ответы [ 14 ]

60 голосов
/ 14 августа 2010

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

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

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

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

18 голосов
/ 14 августа 2010

При написании серверного приложения существует простое правило: Никогда не доверяйте пользовательским данным.

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

12 голосов
/ 14 августа 2010

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

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

7 голосов
/ 14 августа 2010

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

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

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

6 голосов
/ 14 августа 2010

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

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

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

5 голосов
/ 14 августа 2010

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

3 голосов
/ 14 августа 2010

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

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

3 голосов
/ 14 августа 2010

Вы можете отключить / отредактировать JavaScript.

1 голос
/ 14 августа 2010

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

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

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

1 голос
/ 14 августа 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...