2011-08-03 43 views
7

Tôi đang tìm một giải pháp tốt để chúng tôi có thể ngăn tệp exe được tải lên máy chủ. Nó sẽ là tốt nhất nếu chúng ta có thể loại bỏ việc tải lên bằng cách chỉ cần đọc các tiêu đề tập tin ngay sau khi chúng tôi nhận được chúng thay vì chờ đợi cho toàn bộ tập tin để tải lên.cách ngăn tải lên tệp exe trong asp.net mvc

Tôi đã triển khai kiểm tra tiện ích, tìm kiếm giải pháp tốt hơn.

+3

Tiêu đề tệp có thể được giả mạo. Kiểm tra hai byte đầu tiên của dữ liệu được tải lên - nếu đó là 'MZ', tỷ lệ cược là bạn đã có một tệp thực thi. –

+0

trùng lặp: http://stackoverflow.com/questions/3635128/validate-file-type-extension – Matthieu

Trả lời

7

Có phần như thế nào và khi nào/ở đâu. Làm thế nào là khá đơn giản, như các tập tin nhị phân có chứa một tiêu đề và tiêu đề khá dễ dàng để thoát ra và kiểm tra. Đối với tệp windows, bạn có thể kiểm tra bài viết Executable-File Header Format. Các định dạng tương tự được sử dụng cho các loại nhị phân khác, vì vậy bạn có thể xác định loại bạn cho phép và những loại bạn không cho phép.

LƯU Ý: Bài viết được liên kết dành cho truy vấn đầy đủ tệp. Có các phím tắt giá rẻ, xuống và bẩn, nơi bạn chỉ kiểm tra một vài byte.

Thời gian/địa điểm tùy thuộc vào cách bạn nhận tệp. Nếu bạn đang sử dụng phương pháp trừu tượng hóa cao (thư viện tải lên), điều này khá bình thường, bạn có thể phải truyền toàn bộ tệp trước khi bạn có thể bắt đầu truy vấn các bit. Cho dù nó được truyền vào bộ nhớ hay bạn phải lưu và xóa phụ thuộc vào mã hóa của bạn và thậm chí cả thư viện. Nếu bạn kiểm soát việc phát trực tuyến, bạn có khả năng truyền trực tiếp trong các byte đầu tiên (phần tiêu đề) và hủy bỏ quá trình ở giữa luồng.

1

Tôi nghĩ bạn có thể làm điều đó bằng javascript bằng cách kiểm tra xem tệp có kết thúc bằng .exe trước khi gửi dữ liệu và cũng thực hiện phía máy chủ séc.

2

Điểm truy cập đầu tiên vào dữ liệu được tải lên sẽ nằm trong HttpModule. Về mặt kỹ thuật, bạn có thể kiểm tra trước khi tất cả các byte được gửi nếu bạn có .exe trên tay và hủy tải lên. Nó có thể khá phức tạp tùy thuộc vào mức độ bạn muốn thực hiện điều này.

Tôi đề nghị bạn xem xét HttpModule của NeatUpload của Brettle. Có lẽ nó mang lại cho bạn một hướng dẫn về cách đối phó với điều này trên mức độ bạn muốn.

Các vấn đề liên quan