JavaScript необходим доступ к файлам cookie, если AJAX используется на сайте с ограничениями доступа на основе файлов cookie. Будут ли файлы cookie HttpOnly работать на сайте AJAX?
Изменить: Microsoft создала способ предотвратить атаки XSS, запретив доступ JavaScript к файлам cookie, если указан HttpOnly. Позже FireFox принял это. Итак, мой вопрос: если вы используете AJAX на сайте, например StackOverflow, можно ли использовать файлы cookie только Http?
Редактировать 2: Вопрос 2. Если целью HttpOnly является предотвращение доступа JavaScript к файлам cookie, и вы по-прежнему можете получать файлы cookie через JavaScript через объект XmlHttpRequest, в чем смысл HttpOnly < / сильный>?
Редактировать 3: Вот цитата из Википедии:
Когда браузер получает такой файл cookie, он должен использовать его как обычно в следующих HTTP-обменах, но не для того, чтобы сделать его видимым для клиентских скриптов. [32] Флаг
HttpOnly
не является частью какого-либо стандарта и реализован не во всех браузерах. Обратите внимание, что в настоящее время нет предотвращения чтения или записи файла cookie сеанса через XMLHTTPRequest. [33].
Я так понимаю, что document.cookie
блокируется при использовании HttpOnly. Но кажется, что вы все еще можете читать значения cookie в объекте XMLHttpRequest, что позволяет использовать XSS. Как HttpOnly делает вас безопаснее? Делая файлы cookie только для чтения?
В вашем примере я не могу писать на ваш document.cookie
, но я все равно могу украсть ваш файл cookie и опубликовать его в своем домене с помощью объекта XMLHttpRequest.
<script type="text/javascript">
var req = null;
try { req = new XMLHttpRequest(); } catch(e) {}
if (!req) try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
if (!req) try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
req.open('GET', 'http://stackoverflow.com/', false);
req.send(null);
alert(req.getAllResponseHeaders());
</script>
Редактировать 4: Извините, я имел в виду, что вы можете отправить XMLHttpRequest в домен StackOverflow, а затем сохранить результат getAllResponseHeaders () в строку, вывести файл cookie с помощью регулярного выражения и затем опубликовать его во внешнем домен. Похоже, что Википедия и хакеры согласны со мной в этом, но я бы хотел перевоспитаться ...
Окончательное редактирование: А, очевидно, оба сайта ошибочны, на самом деле это ошибка в FireFox. IE6 и 7 - фактически единственные браузеры, которые в настоящее время полностью поддерживают HttpOnly.
Чтобы повторить все, что я узнал:
- HttpOnly ограничивает весь доступ к document.cookie в IE7 и FireFox (не уверен в других браузерах)
- HttpOnly удаляет информацию cookie из заголовков ответов в XMLHttpObject.getAllResponseHeaders () в IE7.
- Объекты XMLHttpObject могут быть отправлены только в домен, из которого они произошли, поэтому междоменная отправка файлов cookie не производится.
изменить: эта информация, скорее всего, устарела.