2009-03-17 44 views
7

Là người mới đến tương đối với cả web và MVC, tôi đang tìm một bản tóm tắt tốt về các phương pháp hay nhất về bảo mật mà tôi nên triển khai.Đảm bảo một trang web ASP.Net MVC

Trang web sẽ hiển thị công khai với "dữ liệu nhạy cảm vừa phải" (có nghĩa là chúng tôi không thể bị kiện, nhưng có thể sẽ không kết bạn nếu dữ liệu bị xóa!) Và sẽ thực hiện các bước bảo mật sau: a: Xác thực và ủy quyền biểu mẫu/thành viên b: Truy vấn tham số để ngăn chặn tiêm sql. c: Thời gian chờ tự động với x phút không hoạt động c: SSL cho mã hóa máy khách đến máy chủ

Bạn còn đề xuất gì khác?

* Bảo mật IIS và mạng không thuộc miền của tôi, vì vậy tôi quan tâm nhiều hơn đến những thứ tôi cần làm cho phần mềm.

+0

Câu hỏi hay, đặc biệt nếu bạn đến từ đồng bằng ASP.NET. – Soviut

+0

Cảm ơn. Tin tưởng rằng nó hay không, hầu hết các hoạt động web của tôi đến khoảng 10 năm trước đây với asp cổ điển. Tôi có rất nhiều thứ bắt kịp để làm! – Aaron

Trả lời

4
  • Nếu bạn đang sử dụng cookie để nhận ra người dùng, hãy chắc chắn sử dụng một thẻ tùy ý (chẳng hạn như một GUID) để lưu trữ trên máy khách để nhận dạng. Tôi đã nhìn thấy quá nhiều trang web lưu trữ địa chỉ email hoặc tên người dùng của tôi trong cookie của tôi ... chỉ cần thay đổi nó sang một trang khác!

  • Viết phần mềm của bạn để phần mềm có thể chạy dưới medium trust.

+0

Nhận xét đầu tiên rất rõ ràng và dễ dàng nó thật tuyệt vời! Không bao giờ nghĩ về nó trong 100 năm :) Trung bình chắc chắn sẽ áp dụng và tôi sẽ làm. Cảm ơn! – Aaron

+0

Hãy thoải mái upvote câu trả lời nếu bạn thấy nó hữu ích. Có lẽ thậm chí chấp nhận nó nếu nó kết thúc là tốt nhất. –

3

Nếu bạn chưa quen với phát triển web, bạn nên lưu ý cross site scripting (XSS). Bạn có thể sử dụng phương pháp trợ giúp Http.Encode để bảo vệ chống lại điều này trong ASP.NET MVC.

1
  1. Có lẽ bạn nên chọn phương pháp có thể được gọi từ bên ngoài hay không. Ví dụ, hãy cẩn thận thực hiện một phương pháp như xóa bất kỳ bảng nào như http://yourhost.com/edit/deletealltable. Đảm bảo bạn thiết kế tốt nhất lớp học và phương pháp của mình. Và cung cấp các thuộc tính [NonAction] để ngăn chặn phương thức công khai đang được gọi.

  2. Đảm bảo bạn hiển thị dữ liệu (đặc biệt nhạy cảm) khi cần thiết với thiết kế tối giản và sử dụng tập lệnh khách hàng miễn là cần thiết.

  3. Xóa mọi tệp rác không sử dụng như tệp không sử dụng trong thư mục giải pháp của bạn.

  4. Kiểm tra và kiểm tra kỹ và kiểm tra mọi điều khiển đầu vào như hộp văn bản. Tôi chỉ có thể đưa thứ gì đó vào hộp văn bản để hack hệ thống của bạn.
  5. Nếu bạn sử dụng kết hợp giữa MVC và ASP.NET thông thường, hãy loại bỏ bất kỳ sự phụ thuộc nào giữa chúng.
+0

Bạn có thể giải thích việc xóa phụ thuộc giữa mvc và biểu mẫu web thông thường không? Tôi không chắc chắn những gì bạn có ý nghĩa chính xác. Cảm ơn! Ví dụ: – Aaron

+0

, aspx thông thường sẽ hiển thị điều khiển ưa thích và sau đó lấy dữ liệu từ mvc http: // yourhost/customer/getall và hiển thị kết quả bằng javascript. Ok, nhưng bạn có thêm mã bảo trì trong cả hai – nickotech2000

0

Đảm bảo bạn bao gồm các khái niệm cơ bản kỹ lưỡng, độc lập với ASP.NET. Đảm bảo DBMS của bạn có một người dùng riêng biệt với các đặc quyền tối thiểu cần thiết (ví dụ: CRUD và thực thi sprocs từ các cơ sở dữ liệu được chỉ định) được thiết lập để truy cập cơ sở dữ liệu từ ứng dụng web.Các truy vấn tham số là một ý tưởng tuyệt vời, nhưng LUÔN LUÔN LẤY MỌI ĐƯỜNG BẤT K AN NÀO CỦA BẠN: nó không phải là một sự phòng thủ hoàn chỉnh chống lại việc tiêm sql.

Giữ thiết kế của bạn sạch sẽ và dễ hiểu. Tài liệu bất cứ điều gì bạn làm rõ ràng, đặc biệt là ở phía cơ sở dữ liệu. Nó sẽ là rất nếu mọi công việc tốt của bạn bị phá hủy bởi hai lập trình viên vài tháng hoặc vài năm sau đó - người không nhận ra, nói rằng người dùng cơ sở dữ liệu cho ứng dụng web (hiện đang truy cập cơ sở dữ liệu trên một máy chủ khác) không nên có quyền root và một người khác đã thêm điều khiển không làm sạch đầu vào đúng cách. Chỉ có rất nhiều thứ có thể được thực hiện về loại thứ này, nhưng thiết kế cho khả năng kẻ ngu sẽ duy trì mã của bạn không phải là người lập trình sẽ nghĩ bạn ngọt ngào - nó sẽ khiến kẻ ngu không bỏ bạn kinh doanh.

2

Đảm bảo bạn ngăn chặn các yêu cầu đặt hàng. Đảm bảo ứng dụng khách được xác thực trước khi cho phép xem dữ liệu nhạy cảm hoặc trong một số trường hợp, đảm bảo khách hàng đã đi qua kênh chính xác, trước khi cho phép thao tác dữ liệu. Ví dụ: chỉ cho phép thêm mục vào giỏ hàng của bạn nếu yêu cầu đến từ trang chi tiết sản phẩm. Nếu bạn không kiểm tra, bất kỳ ai có thể gây rối với hành động. URL sẽ giống như http://server/cart/add/XYZ123 và bất kỳ ai cũng có thể chỉnh sửa thông số 'id'.

+0

Tôi hơi xấu hổ khi hỏi rằng nó rất dễ dàng ... nhưng làm thế nào để tôi nhận được tên của trang yêu cầu (để đảm bảo đến từ kênh thích hợp)? Đó có phải là một phần của đối tượng yêu cầu không? Cảm ơn! – Aaron

+0

Bạn có thể sử dụng biến cookie/phiên để xác định thực thể bạn đang làm việc. Sau đó, chỉ cho phép hành động trên thực thể đó. Bạn "trước" sẽ thiết lập điều đó, biểu thị bạn đã ở đó. –

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