Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 28 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
28
Dung lượng
1,57 MB
Nội dung
CHƯƠNG 12 Nhóm 6b: Huỳnh Văn Thành Ngơ Nguyễn Thanh Tùng SportsStore: An ninh & Chạm hoàn thiện Trong chương trước, thêm hỗ trợ cho việc quản lý ứng dụng SportsStore, khơng khỏi ý bạn sửa đổi danh mục sản phẩm triển khai ứng dụng Tất họ cần phải biết tính quản trị viên sẵn sàng cách sử dụng Admin / Index URL Trong chương này, cho bạn làm để ngăn chặn người ngẫu nhiên từ việc sử dụng chức quản trị mật bảo vệ quyền truy cập vào toàn quyền điều khiển quản trị viên Với quyền bảo mật đó, tơi hồn thành ứng dụng SportsStore cách thêm vào hỗ trợ hình ảnh sản phẩm Điều dường giống với tính bản, đòi hỏi số kĩ thuật thú vị MVC Bảo mật Quyền quản trị Bởi ASP.NET MVC xây dựng dựa tảng cốt lõi ASP.NET tơi có quyền truy cập để xác thực ủy quyền tính ASP.NET, thứ đóng gói hệ thống có mục đích chung cho việc theo dõi người đăng nhập PHÂN TÍCH VỀ TÍNH NĂNG BẢO MẬT CỦA ASP.NET Trong chương này, sử dụng tính bảo mật sẵn có Điều phần tính tảng ASP.NET MVC Framework phần có sẵn cách tiếp cận khác Tơi bao gồm tất tính xác thực ủy quyền chi tiết sách Pro ASP.NET MVC Platform tôi, Apress xuất vào năm 2014 Nhưng không muốn bạn phải mua sách thứ để tìm hiểu thứ ứng dụng bảo mật web, Apress đồng ý gói gọn chương bảo mật quan trọng từ Platform phân phối chúng miễn phí từ Apress.com Họ không sẵn sàng viết xong sách, tất nhiên, dự án tơi khơng xa vào năm 2014 trước họ sẵn sàng cho phép tải xuống Tạo sách an ninh Tơi bắt đầu cách cấu hình hình thức xác thực, cách mà người dùng xác nhận ứng dụng ASP.NET Trong Bảng 12-1, bạn thấy bổ sung mà thực cho tập tin Web.config dự án SportsStore.WebUI (một thư mục gốc dự án thư mục views) Bảng 12-1: Cấu hình xác thực tập tin Web.config Xác thực thiết lập cách sử dụng yếu tố xác thực sử dụng thuộc tính để xác định tơi muốn hình thức xác thực, loại thường sử dụng cho ứng dụng web trực tiếp với Internet Trong ASP.NET 4.5.1, Microsoft thêm hỗ trợ cho phạm vi rộng lớn tùy chọn xác thực Internet phù hợp, điều mà mô tả Pro ASP.NET MVC Platform, nói chương trước Tơi gắn bó với hình thức xác thực vận hành tốt với người địa đơn giản để thiết lập quản lý Chú ý: Lựa chọn thay cho hình thức xác thực xác thực Windows, nơi mà thông tin hệ điều hành sử dụng để xác định người sử dụng xác thực tổ chức, nơi người dùng chứng thực cách sử dụng dịch vụ đám mây Windows Azure Tôi không vào tùy chọn này, họ khơng sử dụng rộng rãi ứng dụng Internet Các thuộc tính loginUrl cho thấy ASP.NET nơi để chuyển hướng người dùng họ cần phải tự xác thực (trong trường hợp ~ / Tài khoản / URL Đăng nhập) thuộc tính xác định thời gian chờ người dùng lần để họ đăng nhập thành cơng, thể vài phút (2880 phút 48 giờ) Bước để nói ASP.NET, nơi chi tiết hóa ứng dụng người dùng Tôi phá vỡ điều để tạo bước riêng biệt điều khơng thực dự án thực tế: Tôi xác định tên người dùng mật tập tin web.config Bạn thấy thay đổi Bảng 12-2 Bảng 12-2: Xác định tên người dùng mật tập tin Web.config Tôi muốn giữ ví dụ đơn giản tập trung vào cách mà MVC Framework cho phép bạn áp dụng xác thực ủy quyền cho ứng dụng web Nhưng việc đưa thông tin tập tin Web.config công thức cho thảm họa, đặc biệt bạn thiết lậpcác thuộc tính passwordFormat yếu tố thơng tin để Clear, nghĩa mật lưu trữ văn Cảnh báo: Không lưu trữ thông tin người dùng tập tin Web.config không lưu trữ mật dạng văn Xem chương Pro ASP.NET MVC Platform (như mô tả phần đầu phần này) để biết chi tiết quản lý người dùng thông qua sở liệu Mặc dù khơng thích hợp cho dự án thực tế, cách sử dụng tập tin Web.config để lưu trữ thông tin cho phép tập trung vào tính MVC mà khơng bị chệch hướng vào khía cạnh tảng cốt lõi ASP.NET Kết việc bổ sung vào file Web.config tơi có tên người dùng mã hóa cứng (admin) mật (bí mật) Áp dụng Quyền sở hữu với lọc MVC Framework có tính mạnh mẽ gọi lọc Đây thuộc tính NET mà bạn áp dụng cho phương pháp hành động lớp điều khiển họ giới thiệu bổ sung logic yêu cầu xử lý để thay đổi hành vi MVC Framework Có nhiều loại khác lọc có sẵn bạn tạo lọc tùy chỉnh riêng bạn, giải thích Chương 18 Các lọc mà tơi quan tâm vào lúc lọc cho phép mặc định, Authorize Trong Bảng 12-3, bạn thấy áp dụng lọc cho điều khiển quản trị Bảng 12-3: Thêm thuộc tính quyền sở hữu vào tập tin AdminControl.cs Khi áp dụng mà tham số, thuộc tính ủy quyền cho phép truy cập đến phương pháp điều khiển hành động cho tất người dùng xác thực Điều có nghĩa bạn chứng thực, bạn phép tự động sử dụng tính quản trị Điều tốt cho SportsStore, nơi có tập hợp phương pháp hành động bị hạn chế có người dùng Chú ý: Bạn áp dụng lọc với phương pháp hành động cá nhân với điều khiển Khi bạn áp dụng lọc với điều khiển, hoạt động bạn áp dụng cho phương thức hành động lớp điều khiển Trong Ví dụ 12-3, tơi áp dụng lọcủuy quyền đến lớp, tất phương pháp hành động điều khiển quản trị dành cho người dùng xác thực Bạn thấy hiệu ứng mà lọc ủy quyền có cách chạy ứng dụng điều hướng đến / Admin / Index URL Bạn thấy lỗi tương tự Hình 12-1 Hình 12-1: Hiệu ứng lọc ủy quyền Khi bạn cố gắng truy cập vào phương pháp hành động Index điều khiển quản trị, MVC Framework phát lọc ủy quyền Bởi bạn khơng chứng thực, bạn chuyển hướng đến URL định Web.config phần hình thức xác thực: / Account / Login Tôi không tạo điều khiển Account (đó gây lỗi hình), thực tế MVC Framework cố gắng chuyển hướng yêu cầu cho thấy lọc ủy quyền làm việc Tạo nhà cung cấp xác thực Sử dụng tính xác thực yêu cầu gọi đến hai phương pháp tĩnh lớp System.Web.Security.FormsAuthentication: Các phương pháp xác nhận thông tin cung cấp người sử dụng Phương pháp SetAuthCookie thêm cookie để đáp ứng trình duyệt, người dùng khơng cần phải xác thực họ thực yêu cầu Vấn đề với phương thức gọi tĩnh từ bên phương thức hành động làm cho đơn vị kiểm tra điều khiển khó khăn: mocking frameworks thường mock thành viên định Các lớp bao gồm MVC Framework thiết kế với thử nghiệm đầu, lớp FormsAuthentication trước thiết kế thử nghiệm thân thiện MVC Cách tốt để giải vấn đề tách điều khiển từ phương pháp tĩnh cách sử dụng giao diện, cung cấp lợi ích bổ sung điều phù hợp với mẫu thiết kế MVC rộng làm cho dễ dàng để chuyển sang hệ thống xác thực khác sau Tôi bắt đầu cách xác định giao diện nhà cung cấp chứng thực Tạo thư mục có tên gọi Abstract tập tin Infrastructure dự án SportsStore.WebUI thêm giao diện gọi IAuthProvider Nội dung giao diện hiển thị Bảng 12-4 Bảng 12-4: Nội dung tập tin IAuthProvider.cs Bây tơi tạo thực giao diện hoạt động bao phủ xung quanh phương thức tĩnh lớp FormsAuthentication Tạo thư mục Infrastucture – gọi thời gian Concrete - tạo lớp gọi FormsAuthProvider Nội dung lớp hiển thị Bảng 12-5 Bảng 12-5: Nội dung tập tin FormsAuthProvider.cs Chú ý: Bạn thấy cảnh báo từ Visual Studio phương pháp có FormsAuthentication.Authenticate bị phản đối Đây phần nỗ lực liên tục Microsoft để hợp lý hóa bảo mật người dùng, khu vực hóc búa cho ứng dụng framework web Trong chương này, phương pháp phản đối đủ cho phép thực xác thực cách sử dụng chi tiết tĩnh thêm vào tập tin Web.config Việc thực phương pháp Authenticate gọi phương pháp FormsAuthentication tĩnh mà muốn để tách điều khiển Bước cuối đăng ký FormsAuthProvider phương pháp AddBindings lớp NinjectDependencyResolver, thể Bảng 12-6 Bảng 12-6: Đăng ký nhà cung cấp xác thực tập tin NinjectDependencyResolver.cs Tạo Bộ điều khiển tài khoản Nhiệm vụ tạo điều khiển tài khoản phương pháp hành động Login nêu tập tin Web.config Thực tế, tạo hai phiên phương pháp Login Việc đưa quan điểm có chứa dấu nhắc đăng nhập, phần khác xử lý yêu cầu POST người dùng gửi thông tin họ Để bắt đầu, tạo lớp mà qua điều khiển giao diện Thêm tập tin lớp gọi LoginViewModel.cs vào thư mục Models dự án SportsStore.WebUI chỉnh sửa nội dung để phù hợp với Bảng 12-7 Bảng 12-7: Nội dung tập tin LoginViewModel.cs Lớp chứa thuộc tính cho tên người dùng mật khẩu, sử dụng liệu thích thuộc tính để xác định giá trị cho hai u cầu Cho có hai thuộc tính, bạn bị cám dỗ để làm mà khơng có mơ hình điểm dựa ViewBag để truyền liệu để xem Tuy nhiên, tốt cho việc thực hành để xác định xem mơ hình liệu truyền từ điều khiển đến giao diện từ mơ hình ất kết dính để phương pháp hành động viết cách quán Tiếp theo, tạo điều khiển tài khoản xử lý xác thực Tạo tập tin lớp gọi AccountController.cs thư mục Controllers chỉnh sửa nội dung tập tin để phù hợp với Bảng 12-8 Bảng 12-8: Nội dung tập tin AccountController.cs Tạo Giao diện Để tạo giao diện u cầu người dùng cho thông tin họ, tạo thư mục Views / Account thư mục SportsStore.WebUI Nhấp chuột phải vào thư mục mới, chọn Thêm → MVC View Page (Razor) từ menu, đặt tên để đăng nhập nhấn OK để tạo tập tin Login.cshtml Chỉnh sửa nội dung tập tin để phù hợp với Bảng12-9 Bảng 12-9: Nội dung File Login.cshtml Giao diện sử dụng cách bố trí _AdminLayout.cshtml lớp Bootstrap để tạo kiểu nội dung Khơng có kỹ thuật giao diện này, khác so với việc sử dụng phương thức helper Html.PasswordFor, phương thức mà tạo yếu tố đầu vào mà thuộc tính thiết lập mật Tôi mô tả phương pháp helper hồn chỉnh HTML Chương 21 Bạn thấy cách giao diện xuất cách bắt đầu ứng dụng điều hướng đến URL / Admin / Index, thể Hình 12-2 10 ALTER TABLE [dbo] [Products] ADD [imageData] VARBINARY (MAX) NULL, [ImageMimeType] VARCHAR (50) NULL; Nhấn vào nút Execute (được đánh dấu mũi tên) mặt bên trái cửa sổ Visual Studio cập nhật sở liệu, thêm hai cột vào bảng Để kiểm tra cập nhật, nhấn chuột phải vào bảng Products cửa sổ Server Explorer chọn Open Table Definition từ menu Bạn thấy có cột gọi imageData ImageMimeType, thể Hình 12-3 Hình 12-3: Thêm cột vào sở liệu Mẹo: Nếu cột khơng nhìn thấy được, đóng cửa sổ thiết kế, kích chuột phải vào kết nối liệu cửa sổ Server Explorer chọn Refresh từ trình đơn Các cột nhìn thấy bạn chọn menu Open Table Definition lần Tăng cường Domain Model Tôi cần phải thêm hai miền để lớp sản phẩm dự án SportsStore.Domain tương ứng với cột sở liệu mới, Bảng 12-10 14 Bảng 12-10: Thuộc tính thêm vào File Product.cs Cảnh báo: Hãy chắn tên thuộc tính mà bạn thêm vào lớp sản phẩm xác phù hợp với tên mà bạn cung cấp để tạo cột sở liệu Tạo Giao diện người dùng tải lên Bước để hỗ trợ thêm cho việc xử lý tập tin tải lên Điều liên quan đến việc tạo giao diện người dùng mà quản trị viên sử dụng để tải lên hình ảnh Sửa đổi Views / Admin / Edit.cshtml cho giống với Bảng 12-11 15 Bảng 12-11: Thêm hộ trợ cho hình ảnh tập tin Edit.cshtml 16 Bạn nhận thức trình duyệt Web tải lên tập tin yếu tố hình thức HTML định nghĩa giá trị enctype multipart / form-data Nói cách khác, upload thành cơng, yếu tố hình thức phải này: Nếu khơng có thuộc tính enctype, trình duyệt truyền có tên tập tin nội dung, mà không sử dụng tất Để đảm bảo thuộc tính enctype xuất hiện, tơi phải sử dụng tải Html.BeginForm phương pháp trợ giúp cho phép tơi định HTML thuộc tính, này: 17 using (Html.BeginForm ("Edit", "Admin", FormMethod.Post, {enctype = "multipart / form-data"})) { Có hai thay đổi khác giao diện Việc thay Razor biểu sử dụng tạo yếu tố đầu vào với câu lệnh switch Hiệu nhau, cho phép tơi để xác định thuộc tính mơ hình tơi muốn bỏ hơn, không muốn hiển thị thuộc tính hình ảnh liên quan trực tiếp đến người sử dụng Thay vào đó, tơi thực thay đổi lại, mà để thêm yếu tố đầu vào loại cho phép upload tập tin, với phần tử img để hiển thị hình ảnh gắn với sản phẩm, có sở liệu Thật khủng khiếp inline CSS địa JavaScript thiếu sót thư viện Bootstrap: khơng với yếu tố đầu vào Có số phần mở rộng thêm chức bị mất, lựa chọn câu thần ma thuật hiển thị danh sách khép kín tin cậy Nó không thay đổi cách mà MVC Framework hoạt động, thay đổi nguyên tố tập tin Edit.cshtml Lưu hình ảnh vào sở liệu Tơi cần phải tăng cường phiên POST phương pháp Edit điều khiển quản trị để tải lên liệu hình ảnh lưu sở liệu Bảng 12-12 cho thấy thay đổi Bảng 12-12: Xử lý liệu hình ảnh tập tin AdminController.cs 18 19 Tôi thêm tham số cho phương pháp Edit, mà MVC Framework sử dụng để vượt qua tập tin liệu tải lên Tôi kiểm tra để xem giá trị tham số null; khơng phải là, chép liệu kiểu MIME từ tham số để đối tượng sản phẩm để lưu vào sở liệu Tơi phải cập nhật lớp EFProductRepository dự án SportsStore.Domain để đảm bảo giá trị gán cho imageData ImageMimeType tài sản lưu trữ sở liệu Bảng 12-13 cho thấy thay đổi cần thiết cho phương thức SaveProduct Bảng 12-13: Đảm bảo giá trị hình ảnh lưu trữ sở liệu tập tin EFProductRepository.cs Triển khai thực phương pháp GetImage Trong Bảng 12-11, thêm yếu tố img mà nội dung thông qua phương pháp hành động GetImage điều khiển sản phẩm Tôi thực phương pháp hành động để tơi hiển thị hình ảnh chứa sở liệu Bảng 12-14 cho thấy định nghĩa phương pháp hành động Bảng 12-14: Phương pháp GetImage File ProductController.cs 20 21 Phương pháp cố gắng để tìm sản phẩm phù hợp với ID định tham số Lớp FileContentResult sử dụng kết từ phương pháp hành động bạn muốn trả tập tin cho trình duyệt khách hàng, trường hợp tạo cách sử dụng phương pháp tập tin lớp điều khiển Tôi thảo luận loại kết khác mà bạn thu từ phương thức hành động Chương 17 UNIT TEST: HÌNH ẢNH THU ĐƯỢC Tôi muốn chắn phương pháp GetImage trả kiểu MIME xác từ kho lưu trữ đảm bảo khơng có liệu trả yêu cầu sản phẩm ID không tồn Dưới phương pháp thử nghiệm tạo ra, mà định nghĩa tập tin thử nghiệm gọi ImageTests.cs: 22 23 Khi giao dịch với ID sản phẩm hợp lệ, kiểm tra nhận kết FileResult từ phương thức hành động kiểu nội dung phù hợp với loại hình liệu giả Lớp FileResult không cho truy cập nội dung nhị phân tập tin, tơi phải hài lòng với so với thử nghiệm hồn hảo Khi tơi u cầu ID sản phẩm không hợp lệ, kiểm tra để đảm bảo kết null Hiện người quản trị tải lên hình ảnh cho sản phẩm Bạn thử điều cho cách khởi động ứng dụng, điều hướng đến / Admin / Index URL chỉnh sửa sản phẩm Hình 12-4 cho thấy ví dụ 24 Hiển thị hình ảnh sản phẩm Tất lại để hiển thị hình ảnh với mơ tả sản phẩm danh mục sản phẩm Chỉnh sửa Views / Shared / ProductSummary.cshtml nhằm phản ánh thay đổi in đậm Bảng 12-15 Bảng 12-15: Hiển thị hình ảnh tập tin ProductSummary.cshtml Với thay đổi đó, khách hàng thấy hình ảnh hiển thị phần mô tả sản phẩm họ duyệt Danh mục, thể hình 12-5 25 Hình 12-5: Giao diện hình ảnh sản phẩm Tóm lược Trong chương chương trước, chứng minh ASP.NET MVC Framework sử dụng để tạo thương mại điện tử thực tế Ví dụ mở rộng giới thiệu nhiều tính quan trọng khung: Bộ điều khiển, phương pháp hành động, định tuyến, điểm, mơ hình liên kết, siêu liệu, xác nhận, bố trí, chứng thực, nhiều Bạn thấy số cơng nghệ liên quan đến MVC sử dụng Chúng bao gồm Entity Framework, Ninject, Moq, hỗ trợ cho Visual Studio kiểm tra đơn vị Kết ứng dụng mà có kiến trúc thành phần theo định hướng mà tách khỏi mối quan tâm khác nhau,và sở mã dễ dàng mở rộng trì Trong chương tiếp theo, cho bạn làm để triển khai ứng dụng SportsStore vào sản xuất 26 27 28 ... hình ảnh vào sở liệu Tôi cần phải tăng cường phiên POST phương pháp Edit điều khiển quản trị để tải lên liệu hình ảnh lưu sở liệu Bảng 12- 12 cho thấy thay đổi Bảng 12- 12: Xử lý liệu hình ảnh tập... cho imageData ImageMimeType tài sản lưu trữ sở liệu Bảng 12- 13 cho thấy thay đổi cần thiết cho phương thức SaveProduct Bảng 12- 13: Đảm bảo giá trị hình ảnh lưu trữ sở liệu tập tin EFProductRepository.cs... sở liệu mới, Bảng 12- 10 14 Bảng 12- 10: Thuộc tính thêm vào File Product.cs Cảnh báo: Hãy chắn tên thuộc tính mà bạn thêm vào lớp sản phẩm xác phù hợp với tên mà bạn cung cấp để tạo cột sở liệu