Đây là bài viết Phần 2 nằm trong series: Laravel File Upload

Trong bài viết [Phần 1], mình đã chia sẻ cách tạo form và xử lý file upload cơ bản trong Laravel. Tuy nhiên, trong thực tế, chúng ta không thể để người dùng upload bất kỳ file gì một cách tự do. Việc kiểm tra (validation) và bảo vệ upload là bắt buộc, nhằm đảm bảo tính ổn định và an toàn cho ứng dụng.

Trong bài viết [Phần 2] của loạt bài viết File Upload trong Laravel lần này sẽ bao gồm các nội dung sau:

I. Kiểm tra file upload với Laravel Validation

Bổ sung thêm phần validation vào phần trên cùng trong function store của UploadController nhằm kiểm tra tính xác thực của các file được upload.

$request->validate([
    'file' => 'required|image|mimes:jpg,jpeg|dimensions:max_width=600,min_height=100,max:2048',
]);Code language: PHP (php)
  • required: bắt buộc chọn file
  • image: chỉ chấp nhận file ảnh
  • dimension: kiểm tra kích thước file
  • mimes: giới hạn định dạng (VD: chỉ cho phép jpg, jpeg)
  • max: giới hạn kích thước (tính theo KB, 2048 = 2MB)

II. Hiển thị lỗi khi validate không thành công

Trong blade template upload.blade.php, bổ sung thêm phần hiển thị lỗi validation

@if ($errors->has("file"))
        <div
            class="container mx-auto mt-10 p-6 bg-red-100 border border-red-400 text-red-700 rounded-lg shadow-md max-w-md">
            {{ $errors->first("file") }}</div>
@endifCode language: Bash (bash)

Laravel sẽ tự động redirect về trang cũ nếu validation không thành công, kèm theo hiển thị lỗi.

III. Bảo vệ ứng dụng khỏi rủi ro khi upload

Một số nguy cơ thường gặp khi cho phép người dùng upload file

  • Người dùng upload file thực thi (PHP, exe, js…) nhằm mục đích xấu
  • File quá lớn gây hao tốn tài nguyên
  • Upload ảnh chứa mã độc

Do đó bắt buộc phải luôn áp dụng Validation mỗi khi sử dụng file upload form, và thiết lập rõ các điều kiện cần thiết:

  • Chỉ cho phép định dạng cần thiết (mimes, image)
  • Giới hạn kích thước file (max)
  • Không lưu file vào thư mục public/ trực tiếp
  • Với file nhạy cảm (CV, hóa đơn…), nên dùng disk riêng (chỉnh sửa file filesystems.php để tạo thêm disk) và chỉ cho người dùng đã xác thực truy cập.

IV. Lời kết

Trong [Phần 2] này, mình đã chia sẻ:

  • Cách dùng validation để kiểm tra file upload
  • Hiển thị lỗi cho người dùng
  • Một số kỹ thuật bảo mật để giảm rủi ro

🔗 Mã nguồn

Mã nguồn mình sử dụng trong [Phần 2] này có thể tham khảo ở đây: https://github.com/10h30/laravel-file-upload-series/tree/part-2-validation-security

🔜 Phần 3: Upload nhiều file

Hiện tại form upload chỉ cho phép chọn một file một lần. Nhưng trong thực tế, người dùng thường muốn upload nhiều file cùng lúc, ví dụ như upload nhiều hình ảnh, tài liệu, hay video.

Trong Phần 3, chúng ta sẽ nâng cấp hệ thống để hỗ trợ upload nhiều file một lúc, đồng thời xử lý chúng một cách an toàn và hiệu quả.

Hẹn gặp bạn ở phần 3, sẽ được ra lò vào tối thứ 6 – 09/05/2025.

Nếu bạn cần hỗ trợ kỹ thuật miễn phí, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời trong thời gian sớm nhất.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *


Bạn cần hỗ trợ kỹ thuật chuyên sâu?

Khám phá các gói dịch vụ giúp bạn tối ưu công việc và vận hành hệ thống hiệu quả hơn. Từ chăm sóc website đến hỗ trợ kỹ thuật, mọi thứ đều linh hoạt và phù hợp với nhu cầu của bạn.