Угрозы безопасности AJAX от проверки? - PullRequest
6 голосов
/ 02 декабря 2010

Я хочу проверить форму без перезагрузки всей страницы. В настоящее время я использую JavaScript, однако это небезопасно. Чтобы обойти это, я хочу использовать AJAX и PHP-скрипт для проверки формы. Кто-нибудь знает о каких-либо угрозах безопасности, которые это может иметь?

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

Ответы [ 4 ]

5 голосов
/ 02 декабря 2010

Они в точности совпадают с рисками проверки с помощью чистого клиентского JavaScript.Единственное отличие состоит в том, что вы запрашиваете у сервера некоторые данные как часть процесса.

Пользователь может переопределить JavaScript для отправки формы независимо от результата проверки.

Единственная причина использовать JavaScript при проверке данных на отправку - это сэкономить время пользователя.Если в качестве части этого вы хотите сделать что-то, например, запросить у сервера имя пользователя, когда пользователь заполняет оставшуюся часть формы, тогда отлично - это довольно хорошее использование Ajax.В противном случае, использование Ajax бесполезно.

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

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

2 голосов
/ 02 декабря 2010

Все, что делает AJAX - это выгружает часть процесса на сервер, «скрытую» от клиента (в этом смысле функционал , обрабатывающий ваших данных / переменных, скрыт).Тем не менее, вы должны быть осторожны с информацией, отправляемой на сервер, которая может быть перехвачена или, что еще хуже, скопирована.Разница с чистым JS заключается в том, что ваша функциональная обработка доступна для всеобщего обозрения и потенциально может использоваться.

Проверка не должна выполняться на стороне сервера, если вы не проверяете содержимое БД (то есть уникальность имени пользователя и т. Д.).Если вы просто проверяете, является ли что-то электронным письмом, вы можете сделать это в JS, например, с помощью RegEx.

. Если вы проверяете данные БД, убедитесь, что все переменные запросов БД, которые происходят из отправленных (POST / GET) переменные экранируются с помощью mysql_real_escape_string для предотвращения внедрения SQL

1 голос
/ 02 декабря 2010

Вы можете проверять данные в AJAX так же, как вы можете делать это в чистом JavaScript, но вы должны повторно проверить их в своем скрипте после получения данных.Любого метода проверки на стороне клиента можно избежать, отправив запрос POST вашей цели формы.

0 голосов
/ 06 мая 2016

Главное, что следует иметь в виду, это то, что при использовании AJAX вы по существу предоставляете интерфейс для своей базы данных.Например, если вы проверяете дубликаты имен пользователей (что вы НЕ МОЖЕТЕ сделать в javascript) или дубликаты электронных писем, чтобы предоставить сообщение типа «это имя пользователя уже используется ... попробуйте другой», вы предоставляете интерфейсдля потенциального хакера, чтобы немедленно проверить, какие имена пользователей и / или электронные письма доступны.Соображения безопасности НЕ совпадают с Javascript.Мой совет по этой теме: (1) Используйте параметризованные запросы для доступа к базе данных, как кто-то уже предложил.(2) Реализовать задержку на странице ajax .php - длина зависит от сценария - я хожу примерно на 1 секунду (3) Выполняю ajax при размытии или при потере фокуса, а не при каждом нажатии клавиши (4) Реализация проверкив вашем обработчике ajax, который гарантирует, что запрос приходит с ожидаемой страницы (то есть: не какой-то случайный скрипт, написанный хакером).(5) ТОЛЬКО выполняйте вызов AJAX, когда произошла какая-то другая базовая проверка элемента формы [т.е. базовая проверка JavaScript]

Надеюсь, это поможет.Проверка формы с использованием ajax абсолютно не похожа даже на удаленную проверку валидации javascript.Это интерфейс вашей базы данных, и вы должны быть осторожны с ним.

Это помогает представить, как вы взломали бы свой собственный сайт - знание того, какие адреса электронной почты зарегистрированы на вашем сайте, является отличным местом дляНачните.Поэтому я мог бы написать скрипт для генерации случайных адресов электронной почты, используя обычные слова и / или имена, и обработать ваш обработчик ajax, чтобы получить список зарегистрированных адресов электронной почты для вашего сайта.Я мог бы сделать это быстро, если бы вы не следовали совету (1) - (5), который я изложил выше.Как только у меня есть электронные письма, я просто гуглю их ... скорее всего, это даст мне имя.Я могу угадать имя пользователя оттуда.Так что теперь у меня есть имя пользователя и электронные письма.Для объяснения паролей потребуется слишком много времени, но если я смогу легко получить имена пользователей или электронные письма ... это пометит вас как цель, и вы получите больше внимания, чем вы действительно хотите.

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

Покойся с миром.

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