Ứng dụng Django này thêm một loại trường mới, ConstrainedFileField, có khả năng kiểm tra kích thước và loại tệp. Cũng cung cấp trình kiểm tra javascript cho trường biểu mẫu
Lưu ý về tấn công DOS
Lưu ý quan trọng. việc kiểm tra kích thước tệp được thực hiện bởi Django sau khi toàn bộ tệp đã được tải lên máy chủ và được lưu trữ trong thư mục tạm thời [hoặc trong bộ nhớ nếu tệp nhỏ]. Do đó, điều này rất hữu ích để đảm bảo hạn ngạch của người dùng, chẳng hạn, nhưng sẽ không ngăn được người dùng tấn công muốn chặn máy chủ bằng cách gửi các tệp lớn [e. g. vài Gb]
Để tránh điều này, bạn cần định cấu hình giao diện người dùng của mình để giới hạn kích thước của các tệp được tải lên. Làm thế nào để làm điều đó phụ thuộc vào phần mềm bạn đang sử dụng. Ví dụ bạn dùng apache thì nên dùng directive
Đây là một biện pháp bổ sung, bởi vì bạn thường muốn người dùng bình thường vượt quá kích thước một lượng hợp lý để nhận được thông báo xác thực biểu mẫu thân thiện, trong khi người dùng tấn công sẽ thấy kết nối của họ bị cắt đột ngột như thế nào trước khi tệp tải lên xong. Vì vậy, cài đặt được đề xuất là cung cấp cho max_upload_size một giá trị nhỏ [e. g. 5Mb] và LimitRequestBody cao hơn [e. g. 100Mb]
Django có một buildi , do đó bạn có thể sử dụng cái này với
{{ file.size|filesizeformat }}
như tài liệu nói, điều này sẽ
Định dạng giá trị như kích thước tệp 'con người có thể đọc được' [i. e.
'13 KB'
,'4.1 MB'
,'102 bytes'
, v.v. ]
Vì xác thực tệp đầu vào là một bước phổ biến được sử dụng rộng rãi trong các API ứng dụng nên việc tạo một trình xác thực riêng và sử dụng lại nó sẽ hiệu quả hơn
Yêu cầu
pip install python-magic
. pip install python-magic-bin==0.4.14
tự động đáp ứng sự phụ thuộc của libmagic
. Tuy nhiên, rất có khả năng gây ra sự cố phụ thuộc với nhiều tính năng AWS khác nhau. Do đó, đi với python-magic
brew install libmagic
. Điều này là bắt buộc nếu bạn sử dụng python-magic
và một giải pháp thay thế [được cho là] pip install python-libmagic
không hoạt động với tôi vì một số lý do không xác định
Hướng dẫn này dựa trên việc giới hạn kích thước tệp tải lên hoặc giới hạn giới hạn mà chúng tôi có thể lưu trữ một lượng lớn dữ liệu với ít dữ liệu lưu trữ hơn. Bạn có thể muốn giới hạn nó ở một lượng nhất định để lưu trữ dữ liệu lớn bằng cách sử dụng ít dung lượng hơn
Các bước cơ bản
Hãy bắt đầu hướng dẫn này bằng cách làm theo các bước dưới đây
- Bắt đầu một dự án
- Bắt đầu một ứng dụng
- Tạo siêu người dùng
Trình xác thực. py để kiểm tra kích thước của tệp
Bây giờ chúng ta sẽ tạo một tệp có tên là trình xác thực. py bên trong dự án của chúng tôi sẽ có chức năng kiểm tra kích thước của tệp
Nếu kích thước tệp lớn hơn 10Mb, nó sẽ hiển thị lỗi cho biết kích thước tối đa để tải tệp lên là 10Mb. Bạn cũng có thể thay đổi nó bằng cách chuyển đổi megabyte thành byte
Tạo một tệp có tên trình xác thực. py và mã đoạn mã dưới đây
from django.core.exceptions import ValidationError def validate_file_size[value]: filesize= value.size if filesize > 10485760: raise ValidationError["You cannot upload file more than 10Mb"] else: return value
Mô hình để tải tệp lên bằng cách xác thực kích thước tệp trong Django
Tạo một mô hình để tải lên và kiểm tra các trình xác thực mà chúng tôi đã tạo
from django.db import models from validators import validate_file_size class upload_file[models.Model]: file_name=models.CharField[max_length=50] path=models.FileField[validators=[validate_file_size]] def __str__[self]: return self.file_name
Đây là một mô hình rất đơn giản để tải lên một tệp trong đó các thuộc tính của tệp là tên_tệp và đường dẫn có các trường tương ứng là CharField và FileField. Ở đây chúng tôi đã sử dụng trình xác thực được tạo trong trình xác thực. tập tin py
Bạn cần đưa ứng dụng của mình vào ứng dụng đã cài đặt trong phần cài đặt. py
Cũng đừng quên đăng ký mô hình của bạn trong quản trị viên. py
Chúng tôi đã tạo trình xác thực. py và mô hình của chúng tôi cũng vậy
Chúng tôi chỉ cần di chuyển những thay đổi mà chúng tôi đã thực hiện
Thực hiện hai câu lệnh trong thiết bị đầu cuối. -
python manage.py makemigrations
python manage.py migrate
Chạy máy chủ và kiểm tra giới hạn kích thước tệp tải lên
Cuối cùng, hãy chạy máy chủ của bạn bằng cách sử dụng python manage.py runserver
Bạn sẽ nhận được một liên kết hoặc bạn có thể điều hướng trực tiếp đến //127.0.0.1:8000/admin
Cố gắng tải lên một tệp hơn 10Mb. Bạn sẽ nhận được lỗi hiển thị màn hình như-
Cảm ơn đã đọc hướng dẫn này. Hy vọng bạn thích hướng dẫn này. Hãy bình luận và chia sẻ đánh giá của bạn