2010-06-22 3 views
5

Просто сейчас я пишу проект, и я решил написать его с jquery и ajax запросами.Безопасность запросов AJAX

только вещь, я не знаю, достаточно ли она защищена?

, например, когда я проверить имя пользователя, при регистрации нового пользователя, я использую запрос JQuery Ajax,

я получаю массив существующих имен пользователей из БД (с JSON), а затем проверить, если new_username не inArray() существующих username s, я делаю другой запрос и регистрирую пользователя.

но как насчет безопасности? meybe hacker может найти способ изменить некоторые из моих заявлений if-else, и весь мой секретник будет тормозить.

Возможно, вы поможете мне разобраться в этой ситуации?

Благодаря

+1

большое спасибо за интересное обсуждение. и, может быть, вы знаете методы изменения сценария на стороне клиента? есть ли инструменты для этого? – Simon

ответ

6

Почему вы реализации любого этого на стороне клиента?

Вы должны отправить имя пользователя/пароль через HTTPS в запросе AJAX и дать серверу только данные, необходимые для перемещения пользователя, не полное имя пользователя.

Даже надевая безопасность в сторону, что, если у вас есть миллионы пользователей? Вы собираетесь отправить этот список всем клиентам, чтобы они вошли в систему?

+0

Даже при использовании HTTPS я бы не отправил этот список пользователю; если посетители могут просматривать этот список (используя любой инструмент), они могут видеть, кто зарегистрировался на вашем сайте. Кроме того, не только полагайтесь на проверку на стороне клиента; легко обойти JavaScript. –

+0

Это просто пример, я просто пытаюсь понять работу jquery с точки зрения безопасности (извините за ошибки на английском языке :) – Simon

+2

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

12

(В дальнейшем я предполагаю, что username это идентификатор, с помощью которого пользователь может войти, а не какой-то ник;))

  1. Получение всех имен пользователей, как JSON плохо , Затем злоумышленник получает все зарегистрированные имена пользователей немедленно!
    Просто отправьте имя пользователя на сервер, подтвердите его и отправьте в качестве ответа «действительный» или «недействительный». I.e., проверьте наличие на стороне сервера .

  2. Всегда подтвердить ввод данных пользователя на стороне сервера . JavaScript может быть отключен.

Update:

Это не имеет значения, участвует ли Jquery или нет. Все, что вы отправляете клиенту (и не хэшируется или зашифровано) может быть прочитано клиентом, это не имеет значения, является ли это XMLHttpRequest или «нормальным» запрос.

Вы отправили бы HTML-таблицу со всеми именами пользователей любому посетителю вашего сайта?Я надеюсь, что нет :)


Резюме:

  • только отправлять данные, что клиент может иметь доступ.
  • Подтвердите ввод пользователя на стороне сервера.
  • Не доверяйте пользовательскому вводу.
+2

+1 для таблицы HTML! : D –

+0

нет, я отправляю его как список, а не таблицу: D – Simon

+0

BTW, я знаю много сайтов, которые отправляют все имена пользователей посетителю; он называется «список членов» на многих форумах. [Даже SO делает] (http://stackoverflow.com/users) ;-) –

2

Безопасность - одна из тех вещей, которые лучше всего делают на стороне сервера, если это возможно. Мой типичный подход к входу AJAX заключается в том, чтобы отправить имя пользователя и пароль хеширования MD5 или SHA1 на метод на сервере, который затем позаботится обо всех регистрационных данных. Детали этой реализации будут действительно зависеть от вашей серверной технологии, но в большинстве инфраструктур веб-приложений есть возможности для этого. Могут быть даже некоторые решения, которые включают библиотеки Javascript для обработки работы на стороне клиента.

5

Ajax не является заменой серверного кода. Хотя можно реализовать функции входа в систему и регистрации с помощью ajax, вам все равно придется проверять и хранить данные на сервере.

Более разумная реализация просто отправит запрос https на сервер, содержащий имя пользователя и пароль, на которые сервер будет отвечать yay или nay.

+0

Ajax не заменяет код на стороне сервера <<< THIS !!! – Incognito