Bảo mật tải lên tệp PHP
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 Show
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
Các mối đe dọa tải lên tệpĐể đá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ạiKẻ tấn công cung cấp một tệp cho mục đích xấu, chẳng hạn như
Truy xuất tệp công khaiNế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
Bảo vệ tải lên tệpKhô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
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
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 Chặn tiện ích mở rộngXá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 dungLoạ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ệpCùng với , 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ẽ được nhận
Vệ sinh tên tệpTê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 phần sau. Để 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
Xác thực nội dung tệpNhư đã đề cập trong phần này, 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
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ệpVị 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
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
Quyền Người dùngTrướ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
Quyền hệ thống tập tin
Các tệp phải được lưu trữ theo cách đảm bảo
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 để tải tệp lên một cách an toàn trong PHP?Tập lệnh tải lên hình ảnh hoàn toàn an toàn . Vô hiệu hóa PHP chạy bên trong thư mục tải lên bằng cách sử dụng. htaccess Không cho phép tải lên nếu tên tệp chứa chuỗi "php" Chỉ cho phép tiện ích mở rộng. jpg, jpeg, gif và png Chỉ cho phép loại tệp hình ảnh Không cho phép hình ảnh với hai loại tệp Thay đổi tên hình ảnh Làm cách nào để xác thực tệp tải lên trong PHP?Mã PHP để xác thực và tải lên tệp hình ảnh
. Dữ liệu tệp đã tải lên như kích thước tên, mục tiêu tạm thời nằm trong mảng $_FILES[“image_file”]. Hàm move_uploaded_file trong PHP được sử dụng để tải tệp lên bằng cách truy cập dữ liệu tệp được lưu trữ trong $_FILES superglobal. validate the file type, size and dimension before uploading. The uploaded file data like name size, temporary target are in $_FILES[“image_file”] array. PHP move_uploaded_file function is used to upload the file by accessing file data stored in $_FILES superglobal.
Làm cách nào để xử lý tệp tải lên trong PHP?Tải lên tệp PHP . Định cấu hình "php. ini" Tập tin. Trước tiên, hãy đảm bảo rằng PHP được định cấu hình để cho phép tải tệp lên. . Kiểm tra xem tệp đã tồn tại chưa. Bây giờ chúng ta có thể thêm một số hạn chế. . Kích thước tệp giới hạn. Trường nhập tệp trong biểu mẫu HTML của chúng tôi ở trên được đặt tên là "fileToUpload". . Loại tệp giới hạn. . Hoàn thành tải lên tệp PHP Script Lỗ hổng tải lên tập tin là gì?Lỗ hổng tải tệp lên là khi máy chủ web cho phép người dùng tải tệp lên hệ thống tệp của nó mà không xác thực đầy đủ những thứ như tên, loại, nội dung hoặc kích thước. |