JavaScript нуждается в доступе к файлам cookie, если AJAX используется на сайте с ограничениями доступа на основе файлов cookie. Будут ли cookie HttpOnly работать на сайте AJAX?Как файлы cookie HttpOnly работают с запросами AJAX?
Редактировать: Microsoft создала способ предотвратить атаки XSS, запретив доступ JavaScript к файлам cookie, если указан HttpOnly. Позже FireFox принял это. Поэтому мой вопрос: если вы используете AJAX на сайте, например StackOverflow, являются только файлы Http-Only?
Edit 2: Вопрос 2. Если цель HttpOnly, чтобы предотвратить доступ к JavaScript куки, и вы все еще можете получить куки через JavaScript через XmlHttpRequest Object, , что точка HttpOnly?
Edit 3: Вот цитата из Википедии:
Когда браузер получает такое печенье, предполагается использовать его как обычно в следующих обменов HTTP, но не сделать его видимым для клиентских сценариев. [32] Флаг
HttpOnly
не является частью какого-либо стандарта и не реализован во всех браузерах. Обратите внимание, что в настоящее время нет предотвращения чтения или записи файла cookie сеанса через XMLHTTPRequest. [33].
Я понимаю, что document.cookie
заблокирован, когда вы используете HttpOnly. Но, похоже, вы все еще можете читать значения cookie в объекте XMLHttpRequest, что позволяет использовать XSS. Как HttpOnly делает вас более безопасным, чем? Делать куки по существу только для чтения?
В вашем примере я не могу написать ваш 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() в строку, регулярное выражение из печенья, а затем опубликовать это в внешний домен. Оказывается, что Википедия и ha.ckers согласны со мной на этом, но я хотел бы перевоспитать ...
Final Edit: Ааа, по-видимому, оба сайта не правы, это на самом деле bug in FireFox. IE6 & 7 на самом деле являются единственными браузерами, которые в настоящее время полностью поддерживают HttpOnly.
Повторит все, что я узнал:
- HttpOnly ограничивает весь доступ к document.cookie в IE7 & и FireFox (не уверен, что о других браузерах)
- HttpOnly удаляет информацию печенья из заголовков ответа в XMLHttpObject.getAllResponseHeaders() в IE7.
- XMLHttpObjects могут быть отправлены только в том домене, из которого они были созданы, поэтому нет междоменной проводки файлов cookie.
Редактировать: Эта информация, вероятно, более не актуальна.
Я бросил ваш пример в сценарий greasemonkey, и похоже, что FF больше не отображает файлы cookie. Отличные исследования и примеры. – 2010-07-14 22:09:03
Возможно, с той же самой политикой происхождения вы не можете сделать http-запрос для домена, который не является тем же самым скриптом; однако я считаю, что вы можете легко передать файлы cookie, перенаправив пользователя на страницу с помощью window.location и передав информацию через параметры строки запроса. – 2016-06-09 08:38:29