Подтвердить что ты не робот

Файлы cookie для входа/сессии, Ajax и безопасность

Я пытаюсь определить самый безопасный метод для формы входа в систему на основе ajax для аутентификации и установки cookie на стороне клиента. Я видел вещи о таких атаках XSS, как это:

Как файлы cookie HttpOnly работают с запросами AJAX?

и

http://www.codinghorror.com/blog/archives/001167.html

Итак, я думаю, мои основные вопросы...

1) Использует чистый ajax, чтобы установить cookie файлы в безопасном режиме, если да, то какой самый безопасный метод (httpOnly + SSL + зашифрованные значения и т.д.)?

2) Использует ли чистый метод ajax настройку стороны клиента cookie? Это вообще безопасно?

3) Является ли настройка файлов cookie таким образом надежным во всех основных браузерах/ОС?

4) Будет ли использование скрытого IFrame более безопасным (вызов веб-страницы для установки файлов cookie)?

5) Если возможно, у кого-нибудь есть код для этого (PHP - это мой бэкэнд)?

Моя цель - установить файлы cookie и сделать их доступными для следующего вызова сервера без перехода от страницы.

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

Спасибо, -Todd

4b9b3361

Ответ 1

  • Файл cookie должен быть создан на стороне сервера, потому что сеанс привязывает клиента к серверу, и поэтому токен-обмен должен перейти от сервера к клиенту на каком-то этапе. На самом деле не было бы полезно создавать клиентскую часть cookie, поскольку клиент является ненадежной удаленной машиной.

    Можно установить cookie во время вызова AJAX. Для сервера (и сети) вызов AJAX - это просто HTTP-вызов, и любой HTTP-ответ сервера может установить cookie. Так что да, можно инициировать сеанс в ответ на вызов AJAX, и файл cookie будет храниться клиентом как обычно.

    Итак, вы можете использовать AJAX для ведения журнала в том же состоянии, что и вы, возможно, просто использовали POST из формы на странице. Сервер увидит их одинаково, и если сервер установит куки файлы, браузер сохранит их.

    В принципе, Javascript на стороне клиента никогда не должен знать ценность файла cookie (и он лучше для безопасности, если он этого не делает, чего можно достичь с помощью расширения "cookie" httponly, выполняемого в последнее время браузерами), Обратите внимание, что дальнейшие HTTP-вызовы от клиента к серверу, независимо от того, являются ли они обычными запросами страниц или являются запросами AJAX, будут включать этот файл cookie автоматически, даже если он помечен httponly, и браузер соблюдает это расширение. Ваш script не обязательно должен "знать" cookie.

    Вы упомянули использование HTTPS (HTTP over SSL), что не позволяет другим пользователям читать информацию в пути или выдавать себя за сервер, поэтому это очень удобно для предотвращения простой передачи пароля или другой важной информации. Он также может помочь защитить от сетевых атак, хотя он не делает вас невосприимчивым ко всему, что CSRF может вас бросить, и он вовсе не защищает вас от подобных сеансов или XSS. Поэтому я бы не стал думать о HTTPS как об исправлении, если вы его используете: вам все равно нужно проявлять бдительность в отношении межсайтового скриптинга и подделки на основе межсайтового запроса.

  • (см. 1. Я как бы объединил их)

  • Учитывая, что cookie задается сервером в заголовках HTTP-ответа, да, он надежен. Однако, чтобы сделать его совместимым с кросс-браузером, вам все равно необходимо обеспечить вход в систему, когда AJAX недоступен. Для этого может потребоваться реализация альтернативы, которая видна только в случае отсутствия Javascript или если AJAX недоступен. (Примечание: теперь в 2014 году вам больше не нужно беспокоиться о поддержке браузера для AJAX).

  • Это не повлияет на безопасность. В этом не было бы необходимости, за исключением того, что раньше я видел скрытые iframe, прежде чем "имитировать" AJAX раньше - т.е. Делать асинхронные вызовы на сервер. В принципе, как бы вы ни занимались, это не имеет значения, это сервер, устанавливающий cookie, и клиент будет принимать и возвращать cookie, независимо от того, делает он это AJAX или нет.

По большей части, независимо от того, используете ли вы AJAX или нет, это не влияет на безопасность, так как вся реальная безопасность происходит на стороне сервера, а на сервере вызов AJAX - это как вызов, отличный от AJAX: которому доверяют. Поэтому вам нужно знать о проблемах, таких как фиксация сеанса и login CSRF, а также проблемы, затрагивающие сессию в целом, например CSRF и XSS так же, как если бы вы не использовали AJAX. Проблемы не меняются при использовании AJAX за исключением, за исключением, я полагаю, что вы можете совершать больше ошибок с помощью технологии, если вы менее знакомы с ней или это сложнее.

Отвечено обновлено Сентябрь 2014 года