2010-12-13 28 views
6

Thực hành tốt nhất để bảo vệ DLL cho các dự án bạn đang làm việc là gì? Một số DLL nhất định mà tôi quan tâm đến việc phát triển sẽ có lớp truy cập dữ liệu (DAL) và chức năng lớp logic nghiệp vụ (BLL). Có thể có một số ứng dụng cuối cùng có thể nhấn các tệp DLL này để thực hiện các chức năng cụ thể của doanh nghiệp.Làm thế nào để bảo vệ .NET DLL's

Cách tốt nhất để bảo vệ các tệp DLL này là gì để chúng chỉ có thể được sử dụng bởi các ứng dụng của người sáng tạo?

Bảo mật cho cả việc chặn sử dụng trái phép các tệp DLL và bảo mật đối với việc giải mã có thể là cả hai mong muốn.

+2

Bạn có nghĩa là bảo vệ chúng chống lại việc dịch ngược hoặc đơn giản bảo vệ chúng chống lại việc sử dụng không? – NotMe

+0

Hiện tại tôi đang tìm kiếm, nhưng thực sự tìm kiếm cả hai. Đã cập nhật câu hỏi cho phù hợp. – Matt

Trả lời

4

Một tùy chọn có thể là đánh dấu tất cả các lớp tiếp xúc trong tệp DLL là "nội bộ" thay vì "công khai", sau đó sử dụng thuộc tính "InternalsVisibleTo" trong DLL của bạn để đặt tên rõ ràng các tệp DLL (và có thể là exes) được phép sử dụng các loại nội bộ của bạn. Điều này có thể yêu cầu tất cả những người tham gia phải được đặt tên mạnh, nhưng đó là một điều tốt để làm anyway.

Cuối cùng, không có cách nào tuyệt đối để ngăn chặn hacker xác định truy cập mã của bạn khi mã của bạn đang thực thi trên máy của hacker. Tất cả các mã có thể được thực thi bởi máy có thể được tháo rời và lắp ráp lại thành một thứ khác với các công cụ và kinh nghiệm đầy đủ tiên tiến.

Cách tốt nhất để tiếp cận bảo mật mã là đặt câu hỏi "Chúng tôi muốn làm cho ai đó sử dụng mã này mà không có giấy phép hoặc ủy quyền, và chúng tôi sẵn sàng chi bao nhiêu thời gian/tiền để đạt được điều đó ? " Nếu bạn không làm gì, rất dễ dàng cho một người nào đó sử dụng các tệp DLL của bạn trong một số dự án khác. Nếu bạn làm một vài điều đơn giản, bạn có thể làm cho nó bất tiện cho ai đó sử dụng các tệp DLL của bạn ở nơi khác. Nếu bạn đầu tư hàng tháng nỗ lực, bạn có thể làm cho người khác sử dụng sai mã của bạn rất khó khăn, nhưng bạn không bao giờ có thể làm điều đó là không thể.

Một kỹ thuật gần như an toàn tuyệt đối như tôi có thể tưởng tượng là: không thực thi mã của bạn trên máy của khách hàng (hoặc của hacker). Thay vào đó, hãy chạy một dịch vụ web và giữ mã của bạn trên máy chủ, nơi một hacker không thể vô tình kích hoạt trình gỡ lỗi trong quá trình của bạn hoặc tháo rời mã của bạn. Bảo mật mã của bạn sau đó được xác định bởi bảo mật vật lý tại vị trí máy chủ và bảo mật truy cập mạng đến các cổng của máy chủ. Các vectơ tấn công này có nhiều thứ tự độ lớn khó vượt qua hơn bất cứ thứ gì bạn có thể làm để mã thực thi trên máy của hacker. Đối với một số công ty phần mềm, việc di chuyển một phần ứng dụng của họ từ máy khách sang đám mây không phải là có khả năng mở rộng tốt hơn hoặc cập nhật dễ dàng hơn hoặc giảm chi phí, đó là về bảo mật mã và phòng chống vi phạm bản quyền.

+0

Không thực sự. .NET cũng cho phép bạn tham khảo các tập tin exe-file, vì vậy nó tạo ra rất ít hoặc không có sự khác biệt. –

+0

Với công cụ như Reflector từ Red Gate. Ngay cả trong một thực thi hầu như bất cứ điều gì dường như được decompiled tương đối dễ dàng. Vì vậy, bao gồm điều này trong một exe cung cấp nhiều sự giúp đỡ nào trong thực tế? – Matt

+0

Tôi rút lại đề xuất "kéo mã vào DLL", theo điểm của Brian. Phần còn lại là viết tắt: không có khóa tuyệt đối, vì vậy bạn phải quyết định số tiền bạn sẵn sàng đầu tư để làm cho kết quả trở nên bất tiện hơn. – dthorpe

1

Thiết lập xác thực bằng cơ chế Khóa mở. Các hàm trong DLL sẽ chỉ hoạt động nếu bạn cung cấp khóa hợp lệ và mã thông báo.

+0

Bạn có thể làm rõ hoặc cung cấp liên kết đến một số loại ví dụ không? – Matt

1

Nếu ai đó có quyền truy cập vào máy với tất cả các hội đồng đó, bạn có nhiều lo lắng về việc ai đó sử dụng lại chúng, họ có thể truy cập trực tiếp vào cơ sở dữ liệu thay vì sử dụng lắp ráp của bạn.

Nếu đây là ứng dụng dành cho máy tính hoặc thứ gì đó và bạn đang truy cập cơ sở dữ liệu trực tiếp thì bạn cần phải nghĩ lại ứng dụng của mình, truy cập dữ liệu qua dịch vụ web hoặc thứ gì đó thay vì truy cập trực tiếp vào cơ sở dữ liệu.

+0

Kịch bản tồn tại trong môi trường nhân rộng. Các máy này có thể có hoặc không có kết nối internet tại bất kỳ thời điểm nào, làm cho các dịch vụ web không phải là một lựa chọn. – Matt

+0

Sooooo ... Tôi không hiểu ý của bạn là gì. Nói chuyện trực tiếp với cơ sở dữ liệu là xấu, và bạn vẫn không có lý do để nói chuyện trực tiếp với nó. – Phill

+0

Ok Tôi có một DAL và BLL cả trong các dự án riêng biệt và sau đó được biên dịch thành các tệp DLL. Các thư viện này kiểm soát hoạt động logic và DB của chúng ta. Ứng dụng chính là ứng dụng WPF chỉ chứa lớp trình bày. Có các ứng dụng con khác cũng sẽ tấn công vào một số hoạt động DAL và BLL giống nhau. Điều này được thực hiện chỉ đơn giản là để tránh trùng lặp mã hóa từ các ứng dụng khác nhau cần thiết. Toàn bộ mục đích của DAL là nói chuyện với DB. – Matt

1

Bảo vệ tài sản trí tuệ của bạn không thực sự khả thi nếu bạn gửi nó dưới dạng .NET DLL cho một khách hàng. Bạn có thể lưu trữ logic ứng dụng của mình trong đám mây, mặc dù điều đó có thể không phù hợp với kịch bản của bạn.

Ngay cả bộ obfuscators "tốt nhất" cũng không thể sai được.Bạn có thể có thể đưa ra một hacker bình thường, nhưng như dthorpe nói, nếu ai đó thực sự muốn dịch ngược các hội đồng của bạn, họ sẽ.

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