2012-04-27 52 views
5

Tôi xin lỗi trước vì bản chất chung của câu hỏi của tôi, nhưng tôi không thể tìm thấy bất kỳ lời khuyên hữu ích nào từ những người đang cố gắng làm điều tương tự như tôi trên web. Hãy để tôi mô tả kịch bản của tôi:ASP.NET MVC 3 Razor View Restrictions

Tôi đang cung cấp cho người dùng/nhà thiết kế cuối trang web khả năng tùy chỉnh chế độ xem của họ bằng cách lưu trữ chế độ xem (sử dụng Dao cạo) trong cơ sở dữ liệu. Tôi có tất cả những việc này, nhưng câu hỏi của tôi là như sau; Từ quan điểm bảo mật, làm cách nào tôi có thể đảm bảo và thực thi mã không mong muốn đó không được thực thi trong chế độ xem do người dùng xác định? Có hai cách tiếp cận cơ bản mà tôi nghĩ rằng sẽ làm việc theo khái niệm, nhưng tôi không chắc chắn phương pháp nào khả thi hơn hoặc khả thi hơn.

Tùy chọn 1: Tạo phương thức xác thực trong công cụ quản trị cho phép người dùng nhập mã xem. Điều này sẽ cần hoặc là có một cách tiếp cận danh sách trắng hoặc danh sách đen cho những gì được cho phép hay không.

Tùy chọn 2: Ngăn không cho mã không mong muốn có thể thực thi khi hiển thị chế độ xem. Một ví dụ nhanh về một thứ cần được chặn, chúng tôi sẽ không cho phép truy cập để đọc hoặc ghi tệp, truy cập bất kỳ chức năng truy cập dữ liệu nào hoặc thậm chí truy cập cài đặt cấu hình, v.v. trong web.config . Có thể sẽ có một danh sách các thứ có kích thước rất nhỏ mà có lẽ không nên cho phép, nhưng tôi sẽ cần phải ngồi xuống và cố gắng nghĩ về càng nhiều mối quan tâm liên quan đến bảo mật càng tốt.

Câu hỏi của tôi là, phương pháp nào sẽ là cược tốt nhất? Ngoài ra, bất kỳ hướng nào có thể được cung cấp về cách đi về một trong hai? Tôi nghĩ rằng tôi có thể thay đổi dựa trên mức độ tin cậy, đó là Lựa chọn 2, nhưng không thể tìm ra cách nào để thực hiện công việc đó trong trang viên dựa trên mỗi lần xem (mã quản trị được phép thực thi bất cứ điều gì nó muốn). Tôi nghĩ Tùy chọn 1 sẽ kết thúc là đặt cược tốt nhất và tôi sẽ phải kiểm tra đầu vào của các chức năng khung nhất định không được phép. Có ai có kinh nghiệm làm bất cứ điều gì giống như những gì tôi đang cố gắng làm không? Bất kỳ thông tin phản hồi được nhiều đánh giá cao!

+0

Tùy chọn 2 sẽ khủng khiếp từ góc nhìn của người dùng, những người có thể cố gắng sử dụng mã mà người đó không biết là 'xấu'. Tôi đồng ý với SLaks một cách tiếp cận danh sách trắng sẽ tốt hơn, và tôi không biết bản chất chính xác của dự án của bạn như người tiêu dùng của bạn là ai nhưng điều này sẽ là một nhiệm vụ khó khăn tùy thuộc vào mức độ linh hoạt bạn cần cung cấp cho họ. – AwDogsGo2Heaven

+0

Tôi sẽ đề nghị bạn kiểm tra đánh dấu chất lỏng, sau đó tôi tìm thấy [DotLiquid] (http://dotliquidmarkup.org/try-online). Dường như nó bao gồm những gì bạn đang cố gắng để đạt được (nhưng với Liquid thay vì Razor). –

Trả lời

1

Điều này sẽ vô cùng khó khăn.

Bạn có thể chạy mẫu thông qua bộ tiền xử lý Razor, sau đó sử dụng Roslyn (vẫn còn trong giai đoạn beta sớm) để phân tích cú pháp tệp đã tạo và xem qua tất cả các cuộc gọi phương thức (hoặc nhà thầu) và trả về lỗi nếu nó gọi thứ gì đó bạn don ' t thích.
Tôi đặc biệt khuyên bạn nên sử dụng danh sách trắng cho điều đó vì khung .Net đủ lớn để bạn bỏ qua một thứ gì đó trong danh sách đen.


Tuy nhiên, thay vào đó, tôi khuyên bạn không nên sử dụng Dao cạo và thay vào đó sử dụng công cụ tạo khuôn mẫu không cho phép mã C# thực.

+0

Tôi ban đầu DID bắt đầu với một công cụ tạo khuôn mẫu tùy chỉnh, nhưng có vẻ như có nhiều ưu điểm để gắn bó với công cụ xem Dao cạo. tức là khả năng tích hợp cho các tác vụ lập trình xem thông thường như điều kiện, vòng lặp và thực tế là nó cung cấp quyền truy cập vào mô hình. Thêm vào đó có vẻ như cơ chế lưu trữ trong bộ nhớ đệm sẽ tiết kiệm rất nhiều tài nguyên thay vì tôi phải triển khai một cái gì đó tùy chỉnh hơn cho một hệ thống tạo khuôn mẫu tùy chỉnh. Hạn chế thực sự duy nhất tôi có thể tìm thấy (mặc dù nó rõ ràng là một nhược điểm nghiêm trọng) là an ninh.Nếu bạn có thể nghĩ về nhiều hạn chế hơn, điều đó có thể khiến tôi cân nhắc lại. –

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