HSTS và cách bảo vệ Website khỏi cuộc tấn công Man-In-The-Middle

HSTS và cách bảo vệ Website khỏi cuộc tấn công Man-In-The-Middle

Những mẩu tin ngắn hàng ngày dành cho bạn
  • countless.dev là một trang web khá thú vị khi mà nó so sánh giá tiền sử dụng các mô hình LLMs của các nhà cung cấp khác nhau.

    Tại đây bạn có thể nhìn thấy tất cả các mô hình ngôn ngữ lớn phổ biến bởi các nhà cung cấp như OpenAI, Azure, Mistral... Bảng giá cho mỗi 1M tokens đầu vào/ra. Hoặc thậm chí có thể so sánh chúng với nhau để tìm ra nhà cung cấp hoặc mô hình rẻ nhất tuỳ theo mục đích sử dụng.

    » Xem thêm
  • 1,2 năm trước, Kubernetes (k8s) tự nhiên được nhắc đến như một hiện tượng, chắc vì nó bá quá nên ai cũng muốn học và sử dụng. Nó là một công cụ "Automating deployment, scaling, and management of containerized applications" - Vâng! nghe hay ho đấy chứ 🤤.

    Hồi đó thì mình đang đam mê với Docker, đặc biệt là Docker Swarm, cũng tương tự như k8s ý nhưng ở quy mô nhỏ hơn. Docker Swarm thì có vẻ ít phức tạp hơn nhiều so với k8s. Mà như thế cũng tốt vì nó đã và đang đáp ứng rất tốt nhu cầu sử dụng của mình lúc đó, lại còn bớt đi phần phức tạp, lằng nhằng.

    Ấy thế mà 1-2 tháng trở lại đây, các bài viết có tiêu đề "bạn có thực sự cần đến Kubernetes" lại đang nổi lên với tần suất dày hơn. Quả thật k8s rất mạnh nhưng cũng quá phức tạp. Tại sao phải cố dùng dao "mổ trâu để giết gà" cơ chứ? Trừ khi bạn lường trước được độ phức tạp khi muốn áp dụng một công nghệ. Một cái nữa k8s tiêu tốn tài nguyên và nguồn lực ghê ghớm, để vận hành được nó không đơn giản là dựng lên được là xong mà còn phải có rất nhiều nhiều kiến thức nữa 😨.

    À, chắc cũng một phần nữa là do các "ông lớn" đang tập trung đẩy mạnh vào Serverless, giảm bớt sự phức tạp trong khâu vận hành đi, thay vào đó là nên tập trung vào phát triển ứng dụng.

    Bên cạnh đó, thì cái tên WASM cũng đang được nhắc đến rất là nhiều 🤔

    Do you really need Kubernetes in your company/startup? | dev.to

    Do You Really Need Kubernetes?

    » Xem thêm
  • Trước mình cứ khen lấy khen để Serverless, rằng tối ưu chi phí xuống 0đ để duy trì blog các thứ. Đúng là như vậy thật! Nhưng bên cạnh đó serverless cũng có các mặt tối đáng để lưu tâm đấy!

    Hôm kia mình phải mất ngày trời để truy tìm và khắc phục sự cố chỉ vì gọi hàm build-in của Cloudflare KV. Cụ thể là hàm list với limit 1000 - tức là một lần gọi nó trả về 1000 keys của KV. Cơ mà đời không như là mơ. Con số 1000 chỉ là trên lý thuyết. Lúc thì trả về vài trăm, lúc thì vài chục, thậm chí lúc thì lẹt đẹt có vài cái. Thế là làm tắc nghẽn cả hệ thống. À mà cũng không phải là nghẽn mà là hệ thống "nhàn rỗi" quá không có việc gì để làm, trong khi thực tế đáng ra nó phải xử lý cả trăm ngàn cái keys cơ 🥲

    » Xem thêm

Vấn đề

Bảo vệ trang web cũng như bảo vệ người dùng trang web của bạn khỏi những mối nguy hiểm trên mạng internet luôn là nhiệm vụ quan trọng. Bởi không ai muốn trang web của mình bị phá hoại hay thậm chí gây ra những thiệt hại nghiêm trọng cho người dùng.

Đặc tả kỹ thuật liên tục được cập nhật những quy tắc mới nhằm tìm ra giải pháp ngăn chặn hoặc chí ít giảm thiểu những mối lo ngại tiềm tàng cho trang web và cả người dùng của bạn.

HSTS là một trong những đặc tả cách ngăn chặn tấn công trang web bằng hình thức chuyển hướng website không an toàn. Vậy thì HSTS là gì và cơ chế họat động của nó ra sao? Mời các bạn đọc tiếp bài viết dưới đây.

HSTS là gì?

HTTP Strict-Transport-Security (HSTS) thông báo cho các trình duyệt rằng trang web chỉ nên được truy cập bằng HTTPS và những lần truy cập tiếp theo trong tương lai nếu người dùng nhập HTTP sẽ tự động được chuyển đổi thành HTTPS. Nghe thì có vẻ giống "chuyển hướng" (redirect) trang web từ HTTP sang HTTPS bình thường nhưng sự khác nhau ở chỗ nếu áp dụng HSTS thì trình duyệt của bạn sẽ xử lý việc chuyển hướng này thay vì máy chủ.

Khả năng tấn công trong thực tế

Khả năng tấn công trong thực tế

Nếu một trang web chuyển hướng từ HTTP sang HTTPS bằng thiết lập của Web Server chẳng hạn như Nginx, ban đầu người truy cập HTTP sẽ nhận được phản hồi không mã hóa trước khi được chuyển sang HTTPS. Ví dụ: nếu truy cập vào http://2coffee.dev hoặc thậm chí là 2coffee.dev, bạn sẽ thấy trình duyệt phải đợi nhận được phải hồi để chuyển hướng đến https://2coffee.dev. Điều này tạo cơ hội cho một cuộc tấn công trung lộ (man-in-the-middle). Hành vi chuyển hướng có thể bị lợi dụng để chuyển hướng người dùng truy cập đến một trang web độc hại thay vì phiên bản an toàn của trang gốc.

HSTS thông báo cho trình duyệt rằng nó không bao giờ được tải một trang web bằng HTTP, thay vào đó nó phải tự động chuyển đổi tất cả truy cập trang web bằng HTTP sang HTTPS.

Hãy tưởng tượng bạn đang truy cập vào một điểm truy cập Wi-Fi miễn phí và bắt đầu lướt web, truy cập vào dịch vụ ngân hàng trực tuyến để kiểm tra số dư và thanh toán một vài hóa đơn. Thật không may, điểm truy cập bạn đang sử dụng thực sự là máy tính xách tay của tin tặc và chúng đang chặn yêu cầu HTTP ban đầu của bạn để chuyển hướng bạn đến một trang web giả mạo của ngân hàng thay vì trang web thật. Bây giờ dữ liệu cá nhân của bạn có nhiều nguy cơ bị lộ.

HSTS giải quyết vấn đề này. Miễn là bạn đã truy cập trang web ngân hàng của mình một lần bằng HTTPS và trang web có sử dụng HSTS, trình duyệt của bạn sẽ tự động sử dụng HTTPS, điều này ngăn chặn kẻ tấn công thực hiện hành vi trung gian này.

Cơ chế hoạt động

Lần truy cập đầu tiên vào một trang web HTTPS và nó trả về thuộc tính Strict-Transport-Security trong heades, trình duyệt sẽ ghi lại thông tin này để các lượt truy cập trang web bằng HTTP trong tương lai sẽ được thay thế bằng HTTPS.

strict-transport-security: max-age=15724800; includeSubDomains

Khi thời gian hết hạn (max-age) được chỉ định bởi Strict-Transport-Security kết thúc thì mọi thứ hoạt động bình thường như trước khi có HSTS. Nhưng đừng lo, bất cứ khi nào strict-transport-security được gửi đến trình duyệt, nó sẽ cập nhật thời gian hết hạn cho trang web đó, vì vậy nếu người dùng truy cập trang web thường xuyên, max-age sẽ được gia hạn thường xuyên. Nếu cần thiết phải tắt HSTS, chỉ cần đặt max-age=0.

Cách triển khai

Cách triển khai

Dù đang sử dụng bất kì webserver gì, mục tiêu là chúng ta thiết lập thêm một thuộc tính Strict-Transport-Security vào trong headers phản hồi của HTTP request.

Ví dụ nếu dùng Nginx, mở file cấu hình nginx và thêm một dòng.

server {
    listen 443 ssl;

    ...

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    ...

Tham khảo: HTTP Strict Transport Security (HSTS) and NGINX.

Trình duyệt Chrome cung cấp trang web hstspreload.org là nơi bạn có thể khai báo địa chỉ trang web của mình để làm cơ sở dữ liệu cho việc ưu tiên áp dụng HSTS. Tức là nếu trang web của bạn có mặt trong danh sách thì kể cả lần truy cập đầu tiên bằng HTTP thì nó đã biết trang web của bạn có HSTS và tự động áp dụng quy tắc bảo mật.

Tổng kết

HSTS là một trong những nỗ lực của trình duyệt nhằm ngăn chặn những kẻ tấn công nhằm vào khác hàng sử dụng trang web của chúng ta. Qua bài viết này tôi hy vọng mọi người biết đến sự có mặt của HSTS từ đó nâng cao khả năng bảo mật trang web của mình hơn.

Cao cấp
Hello

5 bài học sâu sắc

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.
Author

Xin chào, tôi tên là Hoài - một anh Dev kể chuyện bằng cách viết ✍️ và làm sản phẩm 🚀. Với nhiều năm kinh nghiệm lập trình, tôi đã đóng góp một phần công sức cho nhiều sản phẩm mang lại giá trị cho người dùng tại nơi đang làm việc, cũng như cho chính bản thân. Sở thích của tôi là đọc, viết, nghiên cứu... Tôi tạo ra trang Blog này với sứ mệnh mang đến những bài viết chất lượng cho độc giả của 2coffee.dev.Hãy theo dõi tôi qua các kênh LinkedIn, Facebook, Instagram, Telegram.

Bạn thấy bài viết này có ích?
Không

Bình luận (0)

Nội dung bình luận...