2010-02-19 40 views
7

Tôi đang làm việc trên một dự án sử dụng một loạt các cuộc gọi API WIN32 và yêu cầu một số mã không an toàn. Từ một quan điểm thực hành tốt nhất nên tôi cô lập mã này trong DLL riêng của mình biên soạn với/chuyển đổi không an toàn trong khi vẫn giữ ứng dụng chính của tôi an toàn?Tôi có nên trộn lẫn mã an toàn với mã không an toàn của mình không?

Nói cách khác. Có lý do nào để không biên dịch một dự án với công tắc/không an toàn không? Có rủi ro tiềm ẩn nào không?

Trả lời

7

Một assembly được định nghĩa là đơn vị nhỏ nhất có thể phân phối độc lập, mã phân phối lại trong .NET. Vì vậy, câu hỏi đầu tiên tôi sẽ tự hỏi mình là "tôi có bao giờ muốn tạo một phiên bản mới của mã không an toàn và phân phối nó độc lập với ứng dụng của tôi không?"

Nếu câu trả lời là có, thì bằng mọi cách, hãy đặt mã đó trong hội đồng của riêng nó.

Nếu câu trả lời là không, hãy xem xét các yếu tố khác. Ví dụ, trong bảo mật .NET "cổ điển", bạn có thể có các assembly khác nhau chạy ở các mức tin cậy khác nhau trong cùng một miền appdomain. (Trong CLR hiện đại, hệ thống đơn giản hơn rất nhiều, chỉ có mã hoàn toàn đáng tin cậy và mọi thứ khác chạy ở mức độ tin tưởng được cấp cho appdomain.) Mã của bạn thực hiện điều gì đó không an toàn cần được tin cậy hoàn toàn, nhưng mã chỉ đơn giản gọi nó có thể ít đáng tin cậy hơn nếu mã không an toàn xác nhận tập quyền chính xác.

Bạn có bao giờ gặp tình huống mã an toàn của bạn được tin cậy một phần không? Nếu vậy, sau đó bằng mọi cách, đặt mã không an toàn trong hội đồng của riêng nó, và sau đó tài liệu rằng hội đồng này phải được hoàn toàn đáng tin cậy.

Nếu bạn không ở trong các tình huống như vậy thì tôi sẽ không có khuynh hướng đưa mã không an toàn của tôi vào hội đồng của riêng mình.

Tuy nhiên, tôi muốn viết mô hình đối tượng được quản lý dễ chịu trên mã không được quản lý của tôi, thay vì chỉ hiển thị các cuộc gọi win32 thô. Ví dụ, ngày hôm sau tôi cần gọi một số xác minh tên mạnh win32 apis từ C# và tôi vừa đánh một thư viện nhỏ để lộ chúng một cách độc đáo, trừu tượng hóa tất cả các chi tiết liên quan đến nội thất riêng tư của lớp.

+2

Đủ công bằng. Cách tốt hơn câu trả lời của tôi. Bạn không thể đợi đến khi tôi có 3 upvotes vì ​​vậy tôi có thể nhận được một huy chương để xóa nó? ;) – pdr

+2

Không có tội gì trong việc để lại câu trả lời của bạn trong một thời gian ngay cả khi bạn cho rằng nó thấp kém hơn – Mykroft

+1

@ Mykroft: Gọi nó là niềm tự hào cá nhân, thưa ông – pdr

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