Cách đọc cookie HttpOnly bằng JavaScript


90

Có cách nào để đọc cookie an toàn bằng JavaScript không?
Tôi đã cố gắng thực hiện điều đó bằng cách sử dụng document.cookievà theo như tôi có thể thấy trên bài viết này về cookie an toàn và cờ HttpOnly , tôi không thể truy cập cookie an toàn theo cách này.

Bất cứ ai có thể đề xuất một giải pháp thay thế?


1
Từ wiki : Cookie an toàn chỉ được sử dụng khi trình duyệt đang truy cập máy chủ qua HTTPS.
Pavel Hodek

6
@Pavel Hodek Đó là cờ sai. Cờ cookie "an toàn" không liên quan gì đến cờ bảo mật HTTPOnly. Họ có một hệ thống đặt tên khủng khiếp.
rook

1
Tiêu đề của câu hỏi này nên được thay đổi để bao gồm cờ "HttpOnly". Có vẻ như câu hỏi là về cờ "Bảo mật".
Tom,

Câu trả lời:


125

Các trình duyệt khác nhau cho phép các biện pháp bảo mật khác nhau khi cờ HTTPOnly được đặt. Ví dụ: Opera và Safari không ngăn javascript ghi vào cookie. Tuy nhiên, việc đọc luôn bị cấm trên phiên bản mới nhất của tất cả các trình duyệt chính.

Nhưng quan trọng hơn tại sao bạn muốn đọc một HTTPOnlycookie? Nếu bạn là nhà phát triển, chỉ cần tắt cờ và đảm bảo bạn kiểm tra mã của mình cho xss. Tôi khuyên bạn nên tránh vô hiệu hóa cờ này nếu có thể. Các HTTPOnlylá cờ và "cờ an toàn" (mà buộc cookie được gửi qua https) nên luôn luôn đề ra.

Nếu bạn là kẻ tấn công , thì bạn muốn chiếm quyền điều khiển một phiên . Nhưng có một cách dễ dàng để chiếm quyền điều khiển một phiên bất chấp HTTPOnlycờ. Bạn vẫn có thể đi trên phiên mà không cần biết id phiên. Sâu MySpace Samy đã làm được điều đó. Nó sử dụng XHR để đọc mã thông báo CSRF và sau đó thực hiện một tác vụ được ủy quyền. Do đó, kẻ tấn công có thể làm hầu hết mọi thứ mà người dùng đã đăng nhập có thể làm.

Mọi người quá tin vào HTTPOnlycờ, XSS vẫn có thể khai thác được. Bạn nên thiết lập các rào cản xung quanh các tính năng nhạy cảm. Chẳng hạn như thay đổi mật khẩu đã nộp phải yêu cầu mật khẩu hiện tại. Khả năng tạo tài khoản mới của quản trị viên phải yêu cầu hình ảnh xác thực, đây là một kỹ thuật ngăn chặn CSRF không thể dễ dàng bỏ qua bằng XHR .


Bạn có thể vui lòng nói rõ hơn về điều sâu bọ? Liên kết đó không hoạt động và cũng không thực sự hiểu nhiều từ internet. Cảm ơn bạn.
Abhishek Jebaraj

@Abhishek Jebaraj Nếu bạn không hiểu sâu sammy, hoặc mã thông báo CSRF, trước tiên hãy thử tìm hiểu các giới hạn của chính sách cùng nguồn gốc
rook

tôi muốn lấy ngày hết hạn của cookie chỉ http, làm cách nào để làm điều đó
PirateApp

50

Toàn bộ điểm của cookie HttpOnly là JavaScript không thể truy cập chúng.

Cách duy nhất (ngoại trừ việc khai thác lỗi trình duyệt) để tập lệnh của bạn đọc được chúng là có một tập lệnh hợp tác trên máy chủ sẽ đọc giá trị cookie và gửi lại nó như một phần của nội dung phản hồi. Nhưng nếu bạn có thể và sẽ làm điều đó, tại sao lại sử dụng cookie HttpOnly ngay từ đầu?


Bạn có thể muốn kiểm tra nó để biết liệu trình duyệt người dùng có xử lý HttpOnly cho cookie đúng cách hay không trước khi cho phép người dùng sử dụng trang web của bạn từ trình duyệt cụ thể. Tôi đang tìm một ví dụ có thể đảm bảo hỗ trợ trình duyệt của cờ HttpOnly. MS cũng lời khuyên để làm như vậy, nhưng không có được tư vấn thêm về cách làm: Giảm thiểu XSS với HttpOnly
Ursegor

Tôi thấy họ tư vấn cho danh sách trắng phiên bản trình duyệt. Tôi có thể sai, nhưng thay vào đó, đó có phải là một cách thuận tiện để kiểm tra hỗ trợ từ javascript không? Bạn có thể đề xuất bất kỳ người vẽ nào về điều này?
Ursegor

-7

Một trong những cách là sử dụng trình kiểm tra web safari và trong tab lưu trữ, bạn có thể xem tất cả cookie, httpOnly hoặc không, và chỉ cần chọn cookie Command + C, để sao chép nó.

Khi bạn có chuỗi, bạn có thể dễ dàng phân tích cú pháp nó trở lại bằng bất kỳ trình phân tích cú pháp cookie hoặc javascript thuần túy nào.

nhập mô tả hình ảnh ở đây


1
FF và Chrome cũng có thể làm điều này. Chúng không giống như những gì OP muốn.
imba-tjd

@ imba-tjd Vâng, bạn nói đúng nhưng tôi đang sử dụng Safari vào thời điểm đó nên chỉ có thể xác nhận điều đó.
pankajdoharey

Điều đó giống như bạn trả lời ai đó hỏi "Làm cách nào để lấy thông tin đầu vào của người dùng", "Chỉ cần hỏi họ và sau đó đặt nó trong mã của bạn".
forumulator
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.