Vấn đề bảo mật duy nhất bạn phải xem là chèn văn bản thô (không quét dữ liệu để tránh chèn SQL) vào cơ sở dữ liệu. Nếu không có cơ sở dữ liệu liên quan, bạn nên ổn. Đối với các phần mở rộng, giới hạn các phần mở rộng thực sự là một bộ lọc cấp cao nhất. Thật tuyệt khi có, nhưng nó chỉ nhìn chăm chú vào những gì mà tập tin thực sự chứa đựng. Giới hạn kích thước tệp cũng sẽ giúp ích.
Lưu vào đĩa có thể tốn kém với số lượng giao dịch lớn, nhưng mặt khác, nó sẽ làm xáo trộn bộ nhớ máy chủ của bạn ít hơn khi nhiều yêu cầu/chuỗi hơn đang được sử dụng. Bạn cũng có thể làm việc với các tập tin trong bộ nhớ, nhưng đối với các tập tin lớn, nó có thể sẽ trở nên bất lợi. Hãy xem xét những gì bạn đang làm việc và chọn cách tiếp cận tốt nhất.
Xác định thời gian chờ để các tệp tải lên lớn sẽ không chiếm các quy trình máy chủ không cần thiết khi cuối cùng quá lớn.
Tôi giả định rằng bạn đang làm việc với điều khiển FileUpload
của ASP.NET. Ghi nhớ rằng tập tin không tồn tại thông qua postbacks (để ngăn chặn một lỗ hổng bảo mật), do đó, người dùng phải tiếp tục duyệt đến tập tin mỗi khi trang được yêu cầu. Đây là một mối phiền toái nếu bạn có trình xác thực phía máy chủ.
Edited để trả lời bình luận:
Bằng cách làm việc trong bộ nhớ, tôi đang nói về thao tác các tập tin được tải lên hoàn toàn thông qua mã mà không cần đến nó tiết kiệm vật lý trên đĩa của máy chủ.
Ví dụ, nếu bạn đang sử dụng một điều khiển FileUpload
, sau đó hồ sơ của người sử dụng có thể được truy cập thông qua một đối tượng Suối FileUpload.FileContent
hoặc như là một mảng byte FileUpload.FileBytes
(API Reference). Vì đó là số Stream
bạn chỉ có thể đọc tệp khi đang di chuyển mà không phải lưu tệp trước.
Markup:
<asp:FileUpload ID="fileUploadControl" ToolTip="Upload a file" runat="server" />
codebehind:
If fileUploadControl.HasFile AndAlso _
(fileUploadControl.FileName.ToLower().EndsWith(".txt") OrElse _
fileUploadControl.ToLower().FileName.EndsWith(".dat")) Then
SaveThisToDataBase(fileUploadControl.FileName, fileUploadControl.FileBytes)
End If
Thấy không? Không cần phải lưu vào đĩa. fileUploadControl.FileBytes
chứa một dấu hiệu của dữ liệu được tải lên.
Nếu bạn muốn lưu vào một tệp, bạn chỉ có thể sử dụng luồng để ghi vào đĩa.
Có gì để sắp xếp nếu bạn không cần lưu trữ tệp? Chỉ cần đọc luồng, xử lý và loại bỏ. Không cần phải thực sự lưu các tập tin nếu bạn không cần. – Jamiec
@Jamiec Tôi không biết bạn có thể làm điều này. Bạn có nói rằng tập tin được đọc phía khách hàng và dữ liệu được gửi đến máy chủ? Làm thế nào bạn có thể làm điều này? – Tony
@Tony tệp được đọc và gửi bởi trình duyệt tới máy chủ. Bạn có thể đọc luồng nếu bạn muốn trong bộ nhớ và sau đó chỉ cần vứt nó đi khi bạn đang thực hiện với nó. Tùy thuộc vào lưu lượng truy cập của bạn, điều này có thể đặt một căng thẳng trên máy chủ, mặc dù. Lưu tệp vào đĩa chắc chắn chậm hơn nhưng nó sử dụng ít tài nguyên hơn tại một thời điểm nhất định và bạn có thể trì hoãn việc xử lý nếu nó trở thành vấn đề. – xxbbcc