Tôi phát triển một tập lệnh php để thay thế tập lệnh hiện tại, sẽ có nhiều tiếp xúc với các thị trường/quốc gia khác nhau. Kịch bản này giữa những người khác cung cấp chức năng tải ảnh lên.Cách tiếp cận bảo mật tải lên hình ảnh PHP
Sau nhiều lần đọc về vấn đề này, tôi đã làm theo cách tiếp cận được mô tả bên dưới. Tôi sẽ đánh giá cao ý kiến của bạn về an ninh của nó.
- Ảnh được tải lên trong thư mục riêng 777 bên ngoài gốc web.
- Kiểm tra các tiện ích mở rộng được liệt kê trắng được thực hiện (chỉ cho phép jpg, gifs, png) mọi thứ khác bị xóa.
- Sử dụng getimagesize để kiểm tra kích thước tối đa và hiệu lực ảnh.
- Kiểm tra đối sánh mimetype và phần mở rộng tệp.
- Thay đổi kích thước ảnh đã tải lên thành thứ nguyên std (sử dụng imagecopyresampled).
- Lưu tệp đã tạo dưới dạng jpg.
- Xóa tệp gốc.
- Lưu ảnh bằng tên mới (không phải ngẫu nhiên) tức là img51244.jpg.
- Di chuyển ảnh mới sang các thư mục con khác của một thư mục công cộng (777 quyền) theo thuật toán không thể dự đoán được. Tức là,
img10000.jpg
sẽ được lưu trữ tạiphotos/a/f/0/img10000.jpg
trong khiimg10001.jpg
sẽ được lưu trữ tạiphotos/0/9/3/img10001.jpg
. Điều này được thực hiện vì các lý do khác (sử dụng tên miền phụ cho nội dung tĩnh phân phát hoặc sử dụng CDN).
Tập lệnh sẽ chạy trên máy chủ chuyên dụng của Linux.
không có gì xảy ra với tôi ở đây. ngoài sự cho phép 777 trên thư mục - như tôi hiểu nó, nếu nó có 777 quyền, nó không phải là riêng tư. nhưng như xa như tôi có thể nói điều này sẽ chỉ thực sự quan trọng nếu máy chủ của bạn đã bị xâm nhập (mà không có khả năng cho tôi thông qua kịch bản này ít nhất) – jammypeach
777 không âm thanh an toàn. Có thể liên quan đến http://stackoverflow.com/questions/3644138/secure-user-image-upload-capabilities-in-php – ajreal
Âm thanh rất tốt với tôi, ngoại trừ có thể cho các quyền rất tự do. Có lẽ chúng có thể bị hạn chế một chút? Nếu không, điều này làm mọi thứ cần thiết tôi có thể nghĩ đến, bao gồm việc xóa dữ liệu EXIF –