Почему проверка на стороне клиента представляет собой угрозу безопасности, а не проверку на стороне сервера? - PullRequest
8 голосов
/ 20 августа 2010

Я не совсем понимаю, почему проверка на стороне клиента представляет собой потенциальную угрозу безопасности или большую угрозу безопасности, чем проверка на стороне сервера?Может кто-нибудь дать мне несколько сценариев?

Ответы [ 5 ]

17 голосов
/ 20 августа 2010

В идеале вы должны работать как на стороне клиента, так и на стороне сервера, и никогда ни того, ни другого.Если взглянуть на эти 3 сценария, то оба варианта являются единственным безопасным и удобным для пользователя способом:

Только на стороне клиента: как уже упоминалось, для обхода этих проверок не требуется много усилий, если кто-тохочет отправить искаженные данные на ваш сервер (например, SQL-инъекция).NoScript не запускает код проверки javascript, а некоторые браузеры позволяют пользователю активно изменять все загруженные javascript и html, поэтому пользователь может отсоединить проверочный javascript от элементов управления.

Только на стороне сервера: этотболее надежный, чем только для клиента, в конечном счете, но сокращает удобство для пользователя.Они должны отправить свою форму на сервер, проверить ее и получить страницу с ошибкой о том, что определенное поле недействительно.Что раздражает, так это то, что если какие-либо из этих полей были полями пароля, их значения по умолчанию не заполняются.Например, предположим, что пользователь неправильно ввел номер телефона в форму создания учетной записи.Когда сервер выкладывает страницу о том, как неправильный номер телефона, пользователь увидит это, исправит номер телефона и снова нажмет «отправить», просто чтобы получить еще одну страницу с ошибкой о том, что не введен пароль (и снова ввести его в течение второготекстовое поле), даже если это не было первоначальной проблемой.

Клиент и серверная часть: вы получаете безопасность проверки на стороне сервера, что-то, с чем пользователь будет сталкиваться с трудностями, и удобство для пользователяпроверка ввода без необходимости отправки страницы (независимо от того, выполняете ли вы проверку с помощью чисто локального javascript или AJAX).

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

8 голосов
/ 20 августа 2010

Используя различные инструменты, такие как Fiddler , Noscript , Web Developer и т. Д., Я мог отключить проверку JavaScript на стороне клиента и изменитьданные отправляются на ваш сервер.В зависимости от типа данных и того, что сервер делает с ними, можно инициировать атаку SQL-инъекцией, попытаться поставить под угрозу безопасность сервера или просто сохранить поддельные данные.

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

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

Если вы выполняете проверку только на стороне клиента, кто-то может отключить JavaScript (или изменить код js, например, с помощью firebug).Таким образом, все проверки, сделанные в js, будут бесполезны, и пользователь может вставить в вашу систему недопустимые данные.

2 голосов
/ 20 августа 2010

Я предполагаю, что вы говорите о веб-сценарии?

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

Если бы они были скрытными, они могли бы даже публиковать данные непосредственно на вашем сервере (полностью минуя вашу страницу).проверка на стороне сервера, в дополнение к проверке на стороне клиента или вместо нее, у вас есть дополнительная возможность защититься от этих сценариев.

0 голосов
/ 31 июля 2014

На самом деле, проверка на стороне клиента имеет огромное преимущество в безопасности (в сочетании с проверкой на стороне сервера).Если вы тщательно проверяете клиент, то ВСЕ трафик, поступающий на сервер, должен быть чистым.За исключением нападавших.Это позволяет гораздо лучше обнаруживать атаки на стороне сервера.В целом, это, пожалуй, самое важное, что вы могли бы сделать для защиты своих приложений.Для получения дополнительной информации см. OWASP ESAPI IntrusionDetector или OWASP AppSensor.

О, и, очевидно, если атака начинается и заканчивается в клиенте, например, в XSS на основе DOM, вам придется проверить икодировать на стороне клиента.

...