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

Tin ngắn hàng ngày dành cho bạn
  • R1 chưa qua, R2 đã tới 😅

    Mặc dù mới đang đồn thổi thôi cơ mà chắc chỉ có Deepseek mới gây tiếng vang tương tự như OpenAI hoặc Anthropic. Mà thứ người dùng quan tâm là chất lượng & giá cả 😄

    Deepseek R2 will be releasing soon

    » Xem thêm
  • Opensource này giúp bạn tạo nhanh một trang cá nhân giới thiệu về bản thân (giống như CV á): self.so

    » Xem thêm
  • Cuộc đua mô hình ngày càng khốc liệt khiến các công ty công nghệ không ai muốn bỏ lại phía sau. Llama 4 Scout, Llama 4 Maverick là hai mô hình mã nguồn mở mới nhất của Meta, được quảng cáo với hiệu năng vượt trội, thậm chí còn đánh bại các mô hình tiên tiến nhất như GPT-4.5, Claude Sonnet 3.7, hay Gemini 2.0 Pro... Nhưng bênh cạnh đó, Scout và Maverick đang vấp phải chỉ trích về việc gian lận. Liệu chúng ta có nên đặt lòng tin vào Meta thêm lần nữa 🤔

    Llama 4 Scandal: Meta’s release of Llama 4 overshadowed by cheating allegations on AI benchmark

    » 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.

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