Loại tập tin đầu vào Html mime

Theo mặc định, khi nhấp vào một tệp đầu vào [_______0], trình duyệt sẽ liệt kê tất cả các tệp trong thư mục đích

Đầu vào tệp cung cấp thuộc tính chấp nhận gợi ý trình duyệt liệt kê các loại tệp cụ thể. Giá trị thuộc tính có thể là một hoặc nhiều phần mở rộng tệp, kiểu MIME, được phân tách bằng dấu phẩy

Ví dụ: đầu vào yêu cầu người dùng chọn hình đại diện trông giống như

Thuộc tính accept KHÔNG ngăn người dùng chọn tệp có loại không có trong danh sách. KHÔNG sử dụng nó để xác thực tệp đã chọn

Tải lên tệp ngày càng trở thành một phần thiết yếu của bất kỳ ứng dụng nào, nơi người dùng có thể tải lên ảnh, CV của họ hoặc video giới thiệu dự án mà họ đang thực hiện. Ứng dụng phải có khả năng chống lại các tệp không có thật và độc hại để giữ an toàn cho ứng dụng và người dùng

Nói tóm lại, cần tuân thủ các nguyên tắc sau để đạt được việc triển khai tải lên tệp an toàn

  • Liệt kê các tiện ích mở rộng được phép. Chỉ cho phép các tiện ích mở rộng quan trọng và an toàn cho chức năng kinh doanh
    • Đảm bảo rằng xác thực đầu vào được áp dụng trước khi xác thực tiện ích mở rộng
  • Xác thực loại tệp, không tin tưởng tiêu đề Loại nội dung vì nó có thể bị giả mạo
  • Thay đổi tên tệp thành tên do ứng dụng tạo ra
  • Đặt giới hạn độ dài tên tệp. Hạn chế các ký tự được phép nếu có thể
  • Đặt giới hạn kích thước tệp
  • Chỉ cho phép người dùng được ủy quyền tải tệp lên
  • Lưu trữ các tệp trên một máy chủ khác. Nếu điều đó là không thể, hãy lưu trữ chúng bên ngoài webroot
    • Trong trường hợp truy cập công khai vào tệp, hãy sử dụng trình xử lý được ánh xạ tới tên tệp bên trong ứng dụng [someid -> tệp. máy lẻ]
  • Chạy tệp thông qua phần mềm chống vi-rút hoặc hộp cát nếu có để xác thực rằng tệp không chứa dữ liệu độc hại
  • Đảm bảo rằng mọi thư viện được sử dụng đều được định cấu hình an toàn và được cập nhật
  • Bảo vệ tệp tải lên khỏi các cuộc tấn công CSRF

Các mối đe dọa tải tệp lên¶

Để đánh giá và biết chính xác những biện pháp kiểm soát nào cần triển khai, việc biết bạn đang gặp phải vấn đề gì là điều cần thiết để bảo vệ tài sản của bạn. Các phần sau đây hy vọng sẽ giới thiệu các rủi ro đi kèm với chức năng tải tệp lên

Tệp độc hại¶

Kẻ tấn công cung cấp một tệp cho mục đích xấu, chẳng hạn như

  1. Khai thác các lỗ hổng trong trình phân tích tệp hoặc mô-đun xử lý [e. g. Khai thác ImageTrick, XXE]
  2. Sử dụng tệp để lừa đảo [e. g. hình thức nghề nghiệp]
  3. Gửi bom ZIP, bom XML [hay còn gọi là tấn công tỷ cười] hoặc đơn giản là các tệp lớn theo cách làm đầy bộ nhớ của máy chủ gây cản trở và làm hỏng tính khả dụng của máy chủ
  4. Ghi đè lên một tập tin hiện có trên hệ thống
  5. Nội dung hoạt động phía máy khách [XSS, CSRF, v.v. ] có thể gây nguy hiểm cho những người dùng khác nếu các tệp có thể truy xuất công khai

Truy xuất tệp công khai¶

Nếu tệp đã tải lên có thể truy xuất công khai, các mối đe dọa bổ sung có thể được giải quyết

  1. Công bố công khai các tập tin khác
  2. Bắt đầu một cuộc tấn công DoS bằng cách yêu cầu nhiều tệp. Yêu cầu nhỏ, nhưng phản hồi lớn hơn nhiều
  3. Nội dung tệp có thể được coi là bất hợp pháp, gây khó chịu hoặc nguy hiểm [e. g. dữ liệu cá nhân, dữ liệu có bản quyền, v.v. ] sẽ biến bạn thành máy chủ cho các tệp độc hại như vậy

Bảo vệ tệp tải lên¶

Không có viên đạn bạc nào trong việc xác thực nội dung người dùng. Thực hiện phương pháp bảo vệ chuyên sâu là chìa khóa để làm cho quá trình tải lên khó khăn hơn và bị khóa chặt hơn đối với các nhu cầu và yêu cầu đối với dịch vụ. Việc triển khai nhiều kỹ thuật là chìa khóa và được khuyến nghị, vì không một kỹ thuật nào là đủ để bảo mật dịch vụ

Xác thực tiện ích mở rộng¶

Đảm bảo rằng quá trình xác thực diễn ra sau khi giải mã tên tệp và bộ lọc thích hợp được đặt tại chỗ để tránh một số bỏ qua nhất định, chẳng hạn như sau

  • mở rộng gấp đôi, e. g. .jpg.php, nơi nó dễ dàng vượt qua regex \.jpg
  • Null byte, e. g. .php%00.jpg, trong đó .jpg bị cắt bớt và .php trở thành phần mở rộng mới
  • Regex xấu chung không được kiểm tra và đánh giá đúng cách. Không xây dựng logic của riêng bạn trừ khi bạn có đủ kiến ​​thức về chủ đề này

Tham khảo CS xác thực đầu vào để phân tích cú pháp và xử lý tiện ích mở rộng đúng cách

Liệt kê các tiện ích mở rộng được phép¶

Đảm bảo chỉ sử dụng các tiện ích mở rộng quan trọng đối với doanh nghiệp mà không cho phép bất kỳ loại tiện ích mở rộng không bắt buộc nào. Ví dụ nếu hệ thống yêu cầu

  • tải lên hình ảnh, cho phép một loại được thỏa thuận để phù hợp với yêu cầu kinh doanh;
  • tải lên cv, cho phép các tiện ích mở rộng docxpdf

Dựa trên nhu cầu của ứng dụng, đảm bảo sử dụng các loại tệp ít gây hại nhất và rủi ro thấp nhất

Phần mở rộng khối¶

Xác định các loại tệp có khả năng gây hại và chặn các tiện ích mở rộng mà bạn cho là có hại cho dịch vụ của mình

Xin lưu ý rằng việc chặn các tiện ích mở rộng cụ thể là một phương pháp bảo vệ yếu. Bài viết về lỗ hổng Tải lên tệp không hạn chế mô tả cách kẻ tấn công có thể cố gắng vượt qua kiểm tra như vậy

Xác thực kiểu nội dung¶

Loại nội dung cho các tệp đã tải lên được cung cấp bởi người dùng và do đó không thể tin cậy được vì việc giả mạo là chuyện nhỏ. Mặc dù không nên dựa vào tính năng này để bảo mật nhưng nó cung cấp khả năng kiểm tra nhanh để ngăn người dùng vô tình tải lên các tệp có loại không chính xác

Ngoài việc xác định phần mở rộng của tệp đã tải lên, loại MIME của nó có thể được kiểm tra để bảo vệ nhanh chống lại các cuộc tấn công tải lên tệp đơn giản

Điều này có thể được thực hiện tốt nhất theo cách tiếp cận danh sách cho phép;

Xác thực chữ ký tệp¶

Cùng với xác thực kiểu nội dung, việc xác thực chữ ký của tệp có thể được kiểm tra và xác minh đối với tệp dự kiến ​​sẽ nhận được

Điều này không nên được sử dụng riêng, vì bỏ qua nó là khá phổ biến và dễ dàng

Vệ sinh tên tập tin¶

Tên tệp có thể gây nguy hiểm cho hệ thống theo nhiều cách, bằng cách sử dụng các ký tự không được chấp nhận hoặc bằng cách sử dụng tên tệp đặc biệt và bị hạn chế. Đối với Windows, hãy tham khảo hướng dẫn MSDN sau đây. Để biết tổng quan rộng hơn về các hệ thống tệp khác nhau và cách chúng xử lý tệp, hãy tham khảo trang Tên tệp của Wikipedia

Để tránh mối đe dọa đã đề cập ở trên, việc tạo một chuỗi ngẫu nhiên dưới dạng tên tệp, chẳng hạn như tạo UUID/GUID, là điều cần thiết. Nếu tên tệp được yêu cầu theo nhu cầu kinh doanh, thì việc xác thực đầu vào phù hợp sẽ được thực hiện cho phía máy khách [e. g. nội dung hoạt động dẫn đến các cuộc tấn công XSS và CSRF] và mặt sau [e. g. các tệp đặc biệt ghi đè hoặc tạo] vectơ tấn công. Nên xem xét giới hạn độ dài tên tệp dựa trên hệ thống lưu trữ tệp, vì mỗi hệ thống có giới hạn độ dài tên tệp riêng. Nếu tên tệp người dùng là bắt buộc, hãy cân nhắc thực hiện các thao tác sau

  • Thực hiện một chiều dài tối đa
  • Hạn chế các ký tự trong một tập hợp con được phép một cách cụ thể, chẳng hạn như ký tự chữ và số, dấu gạch ngang, dấu cách và dấu chấm
    • Nếu điều này là không thể, hãy chặn danh sách các ký tự nguy hiểm có thể gây nguy hiểm cho khung và hệ thống đang lưu trữ và sử dụng các tệp

Xác thực nội dung tệp¶

Như đã đề cập trong phần Truy xuất tệp công khai, nội dung tệp có thể chứa dữ liệu độc hại, không phù hợp hoặc bất hợp pháp

Dựa trên loại dự kiến, có thể áp dụng xác thực nội dung tệp đặc biệt

  • Đối với hình ảnh, việc áp dụng các kỹ thuật viết lại hình ảnh sẽ phá hủy bất kỳ loại nội dung độc hại nào được đưa vào hình ảnh;
  • Đối với các tài liệu của Microsoft, việc sử dụng Apache POI giúp xác thực các tài liệu đã tải lên
  • Các tệp ZIP không được khuyến nghị vì chúng có thể chứa tất cả các loại tệp và các vectơ tấn công liên quan đến chúng rất nhiều

Dịch vụ Tải tệp lên sẽ cho phép người dùng báo cáo nội dung bất hợp pháp và chủ sở hữu bản quyền báo cáo lạm dụng

Nếu có đủ tài nguyên, nên tiến hành xem xét tệp thủ công trong môi trường hộp cát trước khi phát hành tệp ra công chúng

Thêm một số tự động hóa vào đánh giá có thể hữu ích, đây là một quy trình khắc nghiệt và cần được nghiên cứu kỹ trước khi sử dụng. Một số dịch vụ [e. g. Virus Total] cung cấp API để quét các tệp chống lại các hàm băm tệp độc hại nổi tiếng. Một số khung có thể kiểm tra và xác thực loại nội dung thô và xác thực nó đối với các loại tệp được xác định trước, chẳng hạn như trong ASP. Thư viện bản vẽ NET. Cảnh giác với các mối đe dọa rò rỉ dữ liệu và thu thập thông tin bởi các dịch vụ công cộng

Vị trí lưu trữ tệp¶

Vị trí lưu trữ tệp phải được chọn dựa trên các yêu cầu kinh doanh và bảo mật. Các điểm sau đây được đặt theo mức độ ưu tiên bảo mật và bao gồm

  1. Lưu trữ các tệp trên một máy chủ khác, cho phép phân tách hoàn toàn các nhiệm vụ giữa ứng dụng phục vụ người dùng và máy chủ xử lý tệp tải lên và lưu trữ của chúng
  2. Lưu trữ các tệp bên ngoài webroot, nơi chỉ cho phép quyền truy cập quản trị
  3. Lưu trữ các tệp bên trong webroot và chỉ đặt chúng ở quyền ghi
  4. Nếu cần có quyền truy cập đọc, thì việc thiết lập các điều khiển thích hợp là bắt buộc [e. g. IP nội bộ, người dùng được ủy quyền, v.v. ]

Lưu trữ tệp theo cách đã nghiên cứu trong cơ sở dữ liệu là một kỹ thuật bổ sung. Điều này đôi khi được sử dụng cho các quy trình sao lưu tự động, các cuộc tấn công không phải hệ thống tệp và các sự cố về quyền. Đổi lại, điều này mở ra cơ hội cho các vấn đề về hiệu suất [trong một số trường hợp], cân nhắc lưu trữ cho cơ sở dữ liệu và các bản sao lưu của nó, và điều này mở ra cơ hội cho cuộc tấn công SQLi. Điều này chỉ được khuyến nghị khi có một DBA trong nhóm và quy trình này cho thấy là một cải tiến trong việc lưu trữ chúng trên hệ thống tệp

Một số tệp được gửi qua email hoặc được xử lý sau khi chúng được tải lên và không được lưu trữ trên máy chủ. Điều cần thiết là phải tiến hành các biện pháp bảo mật được thảo luận trong trang này trước khi thực hiện bất kỳ hành động nào đối với chúng

Quyền Người dùng¶

Trước khi truy cập bất kỳ dịch vụ tải tệp lên nào, việc xác thực hợp lệ sẽ diễn ra ở hai cấp độ đối với người dùng tải tệp lên

  • cấp độ xác thực
    • Người dùng phải là người dùng đã đăng ký hoặc người dùng có thể nhận dạng để đặt các hạn chế và giới hạn cho khả năng tải lên của họ
  • cấp ủy quyền
    • Người dùng phải có quyền thích hợp để truy cập hoặc sửa đổi các tệp

Quyền hệ thống tập tin¶

Đặt quyền truy cập tệp theo nguyên tắc đặc quyền tối thiểu

Các tệp phải được lưu trữ theo cách đảm bảo

  • Người dùng hệ thống được phép là những người duy nhất có khả năng đọc tệp
  • Các chế độ bắt buộc chỉ được đặt cho tệp
    • Nếu bắt buộc phải thực thi, thì việc quét tệp trước khi chạy là bắt buộc như một phương pháp hay nhất về bảo mật để đảm bảo rằng không có macro hoặc tập lệnh ẩn nào khả dụng

Giới hạn tải lên và tải xuống¶

Ứng dụng cũng nên đặt giới hạn yêu cầu phù hợp cho dịch vụ tải xuống nếu có để bảo vệ máy chủ khỏi các cuộc tấn công DoS

Làm cách nào để chỉ định loại tệp trong đầu vào HTML?

Các loại tệp được chấp nhận có thể được chỉ định bằng thuộc tính accept , thuộc tính này nhận danh sách các phần mở rộng tệp được phép hoặc loại MIME được phân tách bằng dấu phẩy. Vài ví dụ. accept="hình ảnh/png" hoặc accept=". png" — Chấp nhận các tệp PNG. accept="hình ảnh/png, hình ảnh/jpeg" hoặc accept=". png,. jpg,. jpeg" — Chấp nhận tệp PNG hoặc JPEG.

Làm cách nào để xác thực loại tệp trong HTML?

Thuộc tính chấp nhận chỉ định bộ lọc cho loại tệp mà người dùng có thể chọn từ hộp thoại nhập tệp . Ghi chú. Thuộc tính accept chỉ có thể được sử dụng với

Làm cách nào để có được đường dẫn tệp đầy đủ trong đầu vào HTML?

Nếu bạn muốn lấy đường dẫn tuyệt đối của tệp, bạn có thể chọn phương thức jQuery attr[] . Ngoài ra, trong trang web, một tệp như hình ảnh, pdf, tài liệu được hiển thị bằng cách đưa đường dẫn đến thuộc tính src của một phần tử.

Làm cách nào để lấy đầu vào từ người dùng trong HTML?

Thẻ .

Chủ Đề