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.
- XMLHttpObjects можуть надсилатись лише до домену, з якого вони походять, тому немає розміщення файлів cookie між доменами.
редагувати: Ця інформація, ймовірно, більше не актуальна.