JavaScript cần quyền truy cập vào cookie nếu AJAX được sử dụng trên một trang web có các hạn chế truy cập dựa trên cookie. Cookie httpOnly có hoạt động trên trang AJAX không?
Chỉnh sửa: Microsoft đã tạo ra một cách để ngăn chặn các cuộc tấn công XSS bằng cách không cho phép truy cập JavaScript vào cookie nếu chỉ định httpOnly. FireFox sau đó đã thông qua này. Vì vậy, câu hỏi của tôi là: Nếu bạn đang sử dụng AJAX trên một trang web, như StackOverflow, thì cookie chỉ là một tùy chọn?
Chỉnh sửa 2: Câu hỏi 2. Nếu mục đích của HttpOnly là ngăn chặn truy cập JavaScript vào cookie và bạn vẫn có thể truy xuất cookie thông qua JavaScript thông qua XmlHttpRequest Object, điểm của HTTPOnly là gì?
Chỉnh sửa 3: Đây là một trích dẫn từ Wikipedia:
Khi trình duyệt nhận được một cookie như vậy, nó được cho là sử dụng nó như bình thường trong các trao đổi HTTP sau đây, nhưng không hiển thị cho các tập lệnh phía máy khách. [32] Các
HttpOnly
cờ không phải là một phần của tiêu chuẩn nào, và không được thực hiện trong tất cả các trình duyệt. Lưu ý rằng hiện tại không có ngăn chặn đọc hoặc ghi cookie phiên thông qua XMLHTTPRequest. [33].
Tôi hiểu rằng document.cookie
nó bị chặn khi bạn sử dụng HttpOnly. Nhưng dường như bạn vẫn có thể đọc các giá trị cookie trong đối tượng XMLHttpRequest, cho phép XSS. Làm thế nào để HTTPOnly làm cho bạn an toàn hơn? Bằng cách làm cho cookie về cơ bản chỉ đọc?
Trong ví dụ của bạn, tôi không thể viết thư cho bạn document.cookie
, nhưng tôi vẫn có thể đánh cắp cookie của bạn và đăng nó lên miền của tôi bằng cách sử dụng đối tượng 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>
Chỉnh sửa 4: Xin lỗi, tôi có nghĩa là bạn có thể gửi XMLHttpRequest đến miền StackOverflow và sau đó lưu kết quả của getAllResponseHeaders () vào một chuỗi, thoát khỏi cookie và sau đó đăng nó lên một miền bên ngoài. Có vẻ như Wikipedia và ha.cker đồng tình với tôi về điều này, nhưng tôi rất thích được giáo dục lại ...
Chỉnh sửa cuối cùng: Ahh, rõ ràng cả hai trang web đều sai, đây thực sự là một lỗi trong FireFox . IE6 & 7 thực sự là các trình duyệt duy nhất hiện hỗ trợ đầy đủ cho HTTPOnly.
Để nhắc lại mọi thứ tôi đã học:
- HttpOnly giới hạn tất cả quyền truy cập vào document.cookie trong IE7 & và FireFox (không chắc chắn về các trình duyệt khác)
- HttpOnly xóa thông tin cookie khỏi các tiêu đề phản hồi trong XMLHttpObject.get ALLResponseHeaders () trong IE7.
- XMLHttpObjects chỉ có thể được gửi đến tên miền mà chúng có nguồn gốc, do đó không có đăng tải tên miền chéo của cookie.
chỉnh sửa: Thông tin này có thể không còn được cập nhật.