HttpOnly Flag và Secure Flag là gì?

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.

  Bí kíp tạo website nhờ vào GitHub và Cloudflare
  Cách gỡ bỏ Adobe Flash. Tại sao Flash bị Adobe khai tử?
Http cookies – tiện lợi nhưng không hề an toàn.

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.

rủi to khi giao tiếp client và serverHình ảnh mô tả cách thức tấn công bằng XSS (Cros site scripting)

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.

httponly được bật là true cho các cookies quan trọnghttponly luôn set là true cho các item cookies quan trọng (ngân hàng VIB)
Khi truy xuất nội dung cookie, chỉ duy nhất ARRAffinity là có thể đọc được

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.

httponly-funny

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.

giao tiếp client và server chỉ bật httponly liệu có đủMột mình httponly liệu rằng có đủ?

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ể:

  1. Hạn chế quyền truy cập tới document.cookie trong IE7, Firefox 3 va Opera 9.5.
  2. Xóa thông tin cookie trong header, khi sử dụng XMLHttpObject.getAllResponseHeaders() – IE 7 .
  3. 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).

hãy set giá trị cho cả httponly flag và secure flag để đảm bảo an toànNên dùng cả 2 cờ cho cookie khi có thể.

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:

Xem thêm Việc làm IT hấp dẫn trên TopDev