2010-08-20 1 views
8

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

+2

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

+0

Дубликаты: http://stackoverflow.com/questions/3483514/why-client-side-validation-is-not-enough, http://stackoverflow.com/questions/1125772/should-you-do-validation-on на стороне сервера – NullUserException

+1

Проверка на стороне клиента не подтверждена - это всего лишь UI-сахара. – seanb

ответ

15

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

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

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

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

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

+0

Спасибо за объяснение, теперь это имеет гораздо больше смысла. – Xaisoft

+0

Это был вопрос, который я получил в школе, когда начал изучать серверные технологии. Все дело в большой картине вещей. –

4

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

2

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

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

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

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

8

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

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

+0

Спасибо, что рассказали мне об этих инструментах. – Xaisoft

0

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

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

+1

Я вижу вашу точку зрения, но вам, вероятно, следует пояснить, что вы утверждаете, что вы проверяете на стороне клиента * в дополнение к * проверке на стороне сервера. –

+0

Спасибо, обновлено. –

Смежные вопросы