MIME Sniffing là gì? Cách để bảo vệ website khỏi cuộc tấn công "dò tìm" MIME

MIME Sniffing là gì? Cách để bảo vệ website khỏi cuộc tấn công "dò tìm" MIME

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 đề

Có thể bạn đã biết, song song với việc bảo mật website ở máy chủ để đảm bảo không ai có thể truy cập được để thực hiện hành vi trái phép, thì bảo mật phía máy khách (client) cũng không hề được xem nhẹ. Mỗi năm, các trình duyệt web phổ biến luôn được cập nhật thêm các bản vá lỗ hổng bảo mật kèm với việc bổ sung các đặc tả kĩ thuật nhằm tăng tính bảo mật hơn cho trình duyệt của họ. Một trình duyệt có thể bảo vệ người dùng tối đa thì ai mà chẳng muốn sử dụng.

MIME types là một trong những đặc tả cho biết bản chất và định dạng của tài liệu, tệp hoặc phân loại byte. Lấy một ví dụ đơn giản cho dễ hình dung là một endpoint API nếu trong headers trả về có chứa thuộc tính Content-Type: application/json thì ngay lập tức client sẽ biết dữ liệu trả về là ở định dạng JSON, từ đó có phương án xử lý phù hợp thay vì phải cố "đoán" xem dữ liệu trả về là text, image hay video...

content-type image

Nếu không có Content-Type hoặc ở một số trình duyệt không "thích" kiểm tra Content-Type thì nó sẽ tiến hành một cuộc "dò tìm" xem dữ liệu trả về ở dạng nào. Điều này vô tình tạo ra một cuộc tấn công gọi là "MIME Sniffing".

MIME Sniffing là gì?

MIME Sniffing đã và đang là một kỹ thuật được một số trình duyệt web (chủ yếu là Internet Explorer) sử dụng để kiểm tra nội dung của một nội dung cụ thể. Việc này được thực hiện nhằm mục đích xác định định dạng tệp của nội dung phản hồi. Kỹ thuật này hữu ích trong trường hợp không có đủ thông tin như Content-Type cho một nội dung cụ thể, do đó có khả năng trình duyệt diễn giải nội dung không chính xác.

Mặc dù việc dò tìm MIME có thể hữu ích để xác định định dạng tệp chính xác của nội dung nhưng nó cũng có thể gây ra lỗ hổng bảo mật. Lỗ hổng này có thể khá nguy hiểm cho cả chủ sở hữu cũng như khách truy cập trang web. Điều này là do kẻ tấn công có thể tận dụng khả năng "dò tìm" MIME để thực hiện một cuộc tấn công XSS (Cross Site Scripting).

Mô tả quá trình MIME Sniffing khá đơn giản. Bao gồm các bước chính sau:

  • Trình duyệt web yêu cầu một nội dung cụ thể phản hồi không có loại nội dung hoặc loại nội dung được đặt trước đó tại máy chủ gốc.
  • Trình duyệt web "dò tìm" nội dung để phân tích nội dung cụ thể đó là định dạng tệp nào.
  • Khi trình duyệt đã hoàn thành phân tích, nó sẽ so sánh những gì nó tìm thấy với những gì máy chủ web cung cấp trong Content-Type tiêu đề (nếu có). Nếu có sự không khớp, trình duyệt sẽ sử dụng loại MIME mà nó xác định là được liên kết với nội dung.

Giả sử trang web của bạn cho phép người dùng upload tệp tin lên máy chủ. Bạn chỉ chấp nhận định dạng ảnh cụ thể là JPG. Kẻ tấn công nhanh trí đổi đuôi một tệp HTML thành .jpg rồi tải tệp lên. Khi đó nếu trình duyệt thực hiện "dò tìm" MIME khi cố gắng hiển thị hình ảnh, khả năng cao đoạn mã HTML sẽ được thực thi ở trình duyệt.

Cách thiết lập ngăn trình duyệt dò tìm MIME

Hầu hết các trình duyệt hiện nay đều tôn trọng tiêu đề này, bao gồm Chrome/Chromium, Edge, IE >= 8.0, Firefox >= 50 và Safari >= 11.

trình duyệt hỗ trợ nosniff

Để thiết lập, bạn chỉ cần đặt X-Content-Type-Options: nosniff trong phản hồi của headers HTTP của máy chủ.

Ví dụ, nếu bạn đang dùng nginx làm máy chủ.

server {
    listen 443 ssl;

    ...

    add_header X-Content-Type-Options nosniff;
    ...

Tổng kết

Mặc dù ngày nay cơ chế bảo mật này có thể là thiết lập mặc định hoặc là cấu hình "không thể thiếu" của máy chủ web. Tuy nhiên tôi hy vọng qua bài viết này cung cấp cho bạn đọc thêm một góc nhìn về tầm quan trọng của các đặc tả kỹ thuật, cũng như các hành vi có thể bị khai thác để sử dụng trong mục đích xấu bất kì lúc nào.

Cao cấp
Hello

Tôi & khao khát "chơi chữ"

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên 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 (1)

Nội dung bình luận...
Avatar
Update Group2 năm trước
Anh ơi viết bài về funtor, monad, Applicative, Monoid đi ạ
Trả lời