Bài viết được sự cho phép của tác giả Kiên Nguyễn
Trước tiên, nếu bạn nào chưa có cái nhìn qua về cookies thì có thể tham khảo bài viết này. Cookies thật sự rất hữu ích, thuận tiện khi sử dụng nhưng cũng tồn tại không ít rủi ro. Bài viết sau đây giúp tìm hiểu rõ thêm về 2 thuộc tính giúp bảo vệ cookies là httponly và secure.
1. Httponly Flag.
1.1 Ngày buồn khi mất cookies.
Chuyện kể rằng:
30/2/2001, một ngày đẹp trời, không nắng, cũng méo mưa, thằng XXX (mean Tèo, Toàn, … not porn) lưới web thì thấy trang https://ZZZ.com. Với chút kiến thức hèn mọn, khi thấy website có sử dụng SSL thì XXX yên tâm lắm, login ngay. Ọt, ọt, ọt, tẹt, tẹt, tẹt, server hì hục làm việc, xác cmn định đây chính xác là thằng XXX, server trả về authKey lưu ở cookies xác nhận đã đăng nhập. Đang định xem ít phim thì PING – có email mới. Hí hửng mở xem, tưởng đâu mail công việc, nào ngờ chỉ là một đường link vô hồn với tên miền khêu gợi http://choiemdi.com.vn. Trông có vẻ ngon, đang thèm , XXX click vào ngay. Bùm, toàn bộ thông tin profile lưu ở ZZZ đều bị mất.
Hết chuyện.
Tại sao?. Tại sao?. Có ma mới biết được!. Nhưng sau khi đọc bài này, chắc con ma kia cũng có thể giải thích tại sao thằng ZZZ lại bị mất thông tin. Nếu đọc xong mà không giải thích được, phải chăng các bạn còn thua cả con ma?. =)))
ĐM, lại chửi khéo bố m rồi, bố m đang đọc bài của mày đấy.
1.2 Tại sao lại thế?.
Nguyên nhân XXX bị mất thông tin cá nhân là do quá chủ quan khi click đọc email. Ngoài ra, do cookies phản hồi từ server không được bảo vệ bởi httponly nên đã bị đối tượng xấu lấy mất cookies xác thực đăng nhập -> dẫn tới mất thông tin.
Trường hợp giá trị httponly không được set hoặc set bằng false thì chỉ cần thực hiện một câu lệnh javascript đơn giản là đã có thông tin cookie.
// Nội dung cookie bị đánh cắp có thể sử dụng cho nhiều mục đích // httponly flag = false hoặc không được set document.cookie = "authKey cookie của XXX";
Về mặt bản chất, cũng có thể hiểu đây như là một cuộc tấn công XSS, đối tượng gửi email sẽ execute một đoạn script truy xuất dữ liệu từ cookie, đánh cắp thông tin, thay thế người dùng giao tiếp với server.
Xã hội phát triển, trải nghiệm người dùng với website càng ngày càng được yêu cầu cao. Người ta chỉ muốn login một lần duy nhất, đóng tab shopping mà vẫn lưu giỏ hàng, … Chính vì vậy, cookie cũng được sử dụng rộng rãi hơn, kéo theo nhiều rủi ro hơn.
1.3 Httponly ra đời.
Để tăng cường bảo mật thông tin lưu trữ trong cookie, httponly ra đời.
Mục đích của thuộc tính httponly là bảo về cookie khỏi việc truy cập trái phép từ browser. Chỉ lưu và gửi kèm cookie phản hồi từ client tới server. Việc hạn chế sự can thiệp từ trình duyệt giúp hạn chế rủi ro từ các cuộc tấn công đánh cắp cookie.
If one cookie is HttpOnly, it cannot be accessed by client JavaScript, which means hackers cannot read the cookie value and send it to his own server, not even know whether this cookie exist.
Nếu cookie được set cờ HttpOnly, nó không thể bị truy cập bởi client thông qua Javascript. Điều đó có nghĩa rằng hacker sẽ không thể đọc được giá trị của cookie và gửi về server của hắn, thậm chí cũng không thể biết cookie có tồn tại hay không.
1.4 Liệu rằng đã đủ?.
Ê, thế mỗi lần tao phản rồi cookies thì set cái cờ này thành true như mấy ông ngân hàng là an toàn rồi chứ gì?.
Xin thưa là KHÔNG. Mặc dù httponly giúp bảo vệ việc truy cập cookies, nhưng không có nghĩa chỉ sử dụng httponly thì cookies đã được an toàn. Trường hợp cookies phản hồi từ server về tới client chỉ thông qua giao thức HTTP?. Tất nhiên, dữ liệu không được mã hóa, một ai đó có thể đánh cặp dữ liệu này trên dọc đường phản hồi từ server tới client.
1.5 Bảo vệ như thế nào?
Ngay khi cookie được tạo và trả về cho client, khi cờ httponly được bật là true. Cả client, browser đều sẽ biết cookie này chỉ được phép truy cập ở máy chủ, mọi phương thức khác cố gắng truy cập thông tin cookie đều bị từ chối.
Ngoài ra, httponly còn có thể:
- Hạn chế quyền truy cập tới document.cookie trong IE7, Firefox 3 va Opera 9.5.
- Xóa thông tin cookie trong header, khi sử dụng XMLHttpObject.getAllResponseHeaders() – IE 7 .
- XMLHttpObject chỉ có thể được gửi trả về domain gốc.
2. Secure Flag
Như phần HttpOnly phía trên ta đã tìm hiểu, chỉ sử dụng riêng HttpOnly là không đủ. Nếu việc bảo mật ở phía client và browser tốt, nhưng lại sử dụng một phương thức transfer kém thì cookie chưa tới được tay người sử dụng đã bị mất (kết hợp Man in the Middle và Session Hijacking). Những cookie đặc biệt quan trọng như (Auth, Session, …) đều có yêu cầu bảo mật rất cao, vì vậy những cookies này chỉ nên được truyền qua những giao thức bảo mật như HTTPS.
Browsers which support the secure flag will only send cookies with the secure flag when the request is going to a HTTPS page. Said in another way, the browser will not send a cookie with the secure flag set over an unencrypted HTTP request.
Trình duyệt hỗ trợ cờ secure sẽ chỉ gửi cookie có kèm cờ này thông qua giao thức HTTPS. Nói theo cách khác, trình duyệt sẽ không gửi cookie thông qua HTTP (không mã hóa dữ liệu).
Đối với môi trường ASP.NET, thao tác bật cờ tương đối đơn giản (thay đổi file Web.config)
Web.config: <httpCookies requireSSL="true" />
Ở một số trang, khi tự động redirect từ http sang https thì client đã có cookie.
Để đảm bảo an toàn, khuyến nghị chung là nên set cờ này cho các cookie quan trọng (website của bạn đã đăng kí thành công SSL/TLS).
3. Tổng kết
Cả HttpOnly flag và Secure flag đều giúp chúng ta nâng cao tính an toàn khi sử dụng cookie, giảm thiểu nguy cơ khi bị dòm ngó bởi các cuộc tấn công như XSS. Tuy nhiên, với mức độ sử dụng cookie thường xuyên và liên tục như hiện nay. Cũng không có gì ngạc nhiên khi sắp tới có thêm một số lỗ hổng nào nữa để ăn cắp cookie. Cuộc đấu giữa người bảo vệ và ăn cắp cookie vẫn đang diễn ra liên tục, vì vậy hãy luôn cập nhật kiến thức của mình về COOKIE (BÁNH NGON NHƯNG KHÔNG HỀ AN TOÀN)
4. Tham khảo
Các bạn có thể đọc thêm các bài viết khác ở đây:
OWASP HttpOnly Flag
OWAS Secure Flag
No cookie for you
Web security: hardening HTTP cookies
Protecting Your Cookies: HttpOnly
Again, thanks for reading, love u so much!
Bài viết gốc được đăng tải tại kieblog.vn
Có thể bạn quan tâm:
- Cách gỡ bỏ Adobe Flash. Tại sao Flash bị Adobe khai tử?
- Sử dụng flat state trong Vue Store
- Security key là gì? Xác thực 2 yếu tố “xịn xò” với Security key
Xem thêm Việc làm IT hấp dẫn trên TopDev