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

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

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

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

14 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо

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

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

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

Другие вопросы по тегам