Вы должны сделать проверку на стороне сервера? - PullRequest
14 голосов
/ 14 июля 2009

Стоит ли выполнять проверку на стороне сервера или можно просто выполнить проверку на стороне клиента?

@ TheTXI

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


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

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

Ответы [ 16 ]

91 голосов
/ 14 июля 2009

Проверка на стороне браузера / клиента - это удобство. Вы не можете полагаться на это. Вам абсолютно необходимо дублировать любую проверку на уровне клиента с проверкой на стороне сервера.

33 голосов
/ 14 июля 2009

Ну, ладно, весь ВАШ код правильный. Что происходит, когда хакер заменяет ваш javascript одним из понравившихся ему, или просто отправляет сообщения POST и GET, как если бы это был ваш код?

Проверка на клиенте - это проблема юзабилити.

Проверка в точке USAGE является проблемой безопасности.

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

Например, вы проверяете данные по SQL-инъекциям перед сохранением в базе данных SQL - библиотека сделает это за вас, если вы выберете подходящую. Вы проверяете данные по CSS, когда отображаете их как HTML. Но если вы предоставите данные в виде XML, RSS или JSON, то проверка будет другой - если вы проверили их только при вводе, вы не предотвратите эксплойты для других форматов, и ваша подпрограмма ввода будет привязана к выходу форматы, которые вы выбираете.

14 голосов
/ 15 июля 2009

Я всегда рассматриваю это как

  • Проверка клиента для удобства использования
  • Проверка сервера для безопасности.
8 голосов
/ 14 июля 2009

Да, вы всегда должны выполнять проверку на стороне сервера. Javascript / AJAX удобен для мгновенной обратной связи с пользователем, но не дает никакой защиты на стороне сервера.

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

6 голосов
/ 14 июля 2009

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

3 голосов
/ 14 июля 2009

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

Я всегда думал, что проверка на стороне клиента / JavaScript является улучшением пользовательского интерфейса, а проверка на стороне сервера - это «фактическая» проверка. Проверка JS полезна для немедленного уведомления о неправильных данных, чтобы помочь вашим пользователям.

3 голосов
/ 14 июля 2009

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

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

3 голосов
/ 14 июля 2009

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

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

Следовательно, важно иметь проверки на стороне сервера.

2 голосов
/ 14 июля 2009

Да, вам все еще нужно выполнить проверку на стороне сервера. сообщение AJAX все еще просто ПОЧТА. Кто-то может достаточно легко написать страницу, которая выполняет POST с неверными данными, или даже проще использовать такой инструмент, как плагин Tamper Data в Firefox, чтобы изменить данные после того, как ваш Javascript проверит их.

2 голосов
/ 14 июля 2009

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

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