MỞ ĐẦU 1.1 TÍNH CẤP THIẾT CỦA ĐỀ TÀI Trong những năm gần đây, thế giới nói chung và Việt Nam nói riêng đã phải trải qua thời kì đại dịch của COVID – 19 với vô vàn khó khăn, trắc trở. Trong thời gian dịch bệnh, ngành thương mại, dịch vụ truyền thống bị suy giảm đáng kể do ban hành các lệnh phong tỏa. Nhưng đây lại là cơ hội mạnh mẽ cho sự phát triển vượt bậc của thương mại điện tử bởi sự tiện lợi mang lại cho người tiêu dùng như mua hàng từ xa, tra cứu, so sánh giá cả. Điển hình là các sàn thương mại điện tử lớn như Shopee, Tiki, Lazada… Nắm bắt được xu hướng và tiềm năng phát triển, chúng tôi đã chọn đề tài “Xây dựng website bán cây sử dụng ASP.NET Core MVC” để người tiêu dùng có thể thuận tiện trao đổi mua bán sản phẩm, đẩy mạnh nên thương mại nước nhà.
Để thực hiện đề tài này, tôi đã thực hiện việc khảo sát và nghiên cứu hiện trạng các website bán cây hiện nay như “Cây để bàn | cây văn phòng Locat” [1], “Cây Xinh - Hệ Thống Bán Sỉ & Lẻ Cây Cảnh Hàng Đầu Việt Nam” [2], “9X GARDEN | #1 Shop Cây Cảnh Mini Không Cần Đất” [3]…Nhìn chung các website khá đầy đủ các chức năng tuy nhiên vẫn còn một vài thiếu sót như việc hiển thị đánh giá của sản phẩm, chức năng thanh toán online, cần tối ưu thời gian mua bán cho khách hàng… 1.2 MỤC TIÊU CỦA ĐỀ TÀI Mục tiêu của đề tài bao gồm: - Hiểu và có khả năng xây dựng website sử dụng ASP.NET Core MVC kết nối cơ sở dữ liệu SQL – Server và các công nghệ liên quan. - Xây dựng một website bán cây với các tính năng sau: hiển thị tin tức, thông tin sản phẩm, chức năng mua hàng, thanh toán online, quản lí danh sách khách hàng, quản lí danh sách sản phẩm, quản lí danh sách tin tức, quản lí danh sách đơn hàng, quản lí danh sách đánh giá, đa ngôn ngữ. - Tìm hiểu và ngăn chặn các lỗ hổng trong xây dựng website.3 ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU Đối tượng của nghiên cứu của đề tài: - Người dùng cuối: Nghiên cứu trải nghiệm mua sắm trực bao gồm cả việc tìm kiếm, xem sản phẩm, thêm vào giỏ hàng, thanh toán và quản lý đơn hàng. - Quản trị viên: Nghiên cứu về cách quản lý sản phẩm, đơn hàng, khách hàng…từ giao diện quản trị.
Phạm vi nghiên cứu của đề tài: - ASP.NET Core MVC 5.0 là nền tảng xây dựng website lớn của Microsoft - SQL Server là một hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) được phát triển bởi Microsoft. - Ngôn ngữ lập trình C#, Javascript. - Các framework hỗ trợ: Entity Framework, Identity Framework… 1.4 GIỚI HẠN ĐỀ TÀI - Chưa xác thực email, số điện thoại. - Chưa liên kết với đơn vị vận chuyển để tính phí vận chuyển, giúp khách hàng xem chi tiết vị trí đơn hàng.
- Chưa cho khách hàng gửi video đánh giá sản phẩm.5 Ý NGHĨA KHOA HỌC VÀ CƠ SỞ THỰC TIỄN Đề tài đề cao khả năng lập trình thông qua việc học hỏi, tiếp thu công nghệ kỹ thuật để xây dựng website thương mại, hiểu và nắm rõ các tính năng cần có trong một website. Bên cạnh ý nghĩa khoa học, đề tài mong muốn mang đến một môi trường công bằng, cạnh tranh và an toàn cho người tiêu dùng. Người mua có thể tìm được sản phẩm mình cần và mua với giá có thể trải qua chọn lọc, người bán có thể giới thiệu sản phẩm tới nhiều người hơn. Qua đó, thúc đẩy sự phát triển của thương mại điện tử nước ta.
2 CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 2.NET CORE MVC 2.1 Giới thiệu về ASP.NET Core ASP.NET Core là một framework mã nguồn mở , đa nền tảng, hiệu suất cao để xây dựng các ứng dụng kết nối Internet hiện đại, hỗ trợ đám mây.NET Core là một thiết kế lại của ASP.x, bao gồm những thay đổi về kiến trúc dẫn đến một khung mô-đun gọn gàng hơn, nhiều mô-đun hơn.2 Mô hình MVC ASP.NET Core MVC là một framework phong phú để xây dựng các ứng dụng web và API bằng cách sử dụng mẫu thiết kế Model-View-Controller. 1: Mô hình MVC .[5] Mẫu kiến trúc MVC tách ứng dụng thành ba nhóm thành phần chính: - Model: Đại diện cho dữ liệu và logic xử lý dữ liệu. Model thường bao gồm các lớp đối tượng (object classes) để biểu diễn dữ liệu và các logic xử lý dữ liệu như truy xuất cơ sở dữ liệu. - View: Đại diện cho giao diện người dùng.
View là nơi hiển thị dữ liệu cho người dùng và tương tác với họ thông qua các trình duyệt web. 3 - Controller: Đại diện cho bộ điều khiển của ứng dụng. Controller xử lý các yêu cầu từ người dùng, nếu cần tương tác với Model để lấy dữ liệu thì chuyển dữ liệu đó đến View để hiển thị cho người dùng còn không thì chuyển trực tiếp tới View để hiển thị cho người dùng. Mô hình MVC trong ASP.NET Core giúp tách biệt giao diện, logic xử lý dữ liệu, quy trình điều khiển, giúp cho việc phát triển và bảo trì trở nên dễ dàng hơn.
Đồng thời cũng tạo điều kiện cho việc tái sử dụng code và phân chia rõ ràng công việc cho FrontEnd Developer và BackEnd Developer.2 SQL SERVER Microsoft SQL Server là một hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS). Các ứng dụng và công cụ kết nối với phiên bản hoặc cơ sở dữ liệu SQL Server và giao tiếp bằng Transact-SQL (T-SQL).[6] Các thành phần và công nghệ của SQL Server bao gồm: - Database Engine: cơ sở dữ liệu là dịch vụ cốt lõi để lưu trữ, xử lý và bảo mật dữ liệu. - Machine Learning Services: hỗ trợ tích hợp học máy. - Integration Services: là nền tảng giúp xây dựng các giải pháp tích hợp dữ liệu hiệu suất cao, bao gồm các gói cung cấp khả năng xử lý trích xuất, chuyển đổi và tải (ETL) cho kho dữ liệu.
- Analysis Services: là nền tảng dữ liệu phân tích. - Reporting Services: cung cấp chức năng báo cáo. - Replication: là tập hợp các công nghệ nhằm sao chép và phân phối dữ liệu sau đó đồng bộ hóa để duy trì tính nhất quán. - Data Quality Services: cung cấp các giải pháp làm sạch dữ liệu.
- Master Data Services: là giải pháp SQL Server để quản lý dữ liệu chính.1 Hash password Hass Password là kĩ thuật biến đổi mật khẩu thành một chuỗi dữ liệu khác giúp ngăn chặn việc kẻ tấn công dễ dàng đánh cắp. Việc hash password được coi 4 là một phần quan trọng của việc bảo vệ hệ thống. Dưới đây là các tác dụng của việc hash password: - Bảo vệ hệ thống: khi mật khẩu được lưu trữ dưới dạng chuỗi hash, ngay cả khi bị đánh cắp thì mật khẩu gốc cũng không dễ dàng bị lộ ra ngoài. - Khi hash password các mật khẩu gốc giống nhau thì chuỗi hash được tạo sẽ khác nhau.
- Bảo vệ quyền riêng tư của người dùng: việc hash password giúp ngăn ngừa việc xâm nhập và đánh cắp trái phép tài khoản người dùng. - Tuân thủ quy định bảo mật. Trong dự án của tôi có sử dụng Identity Framework để hỗ trợ chức năng đăng kí, đăng nhập…Với Identity Framework việc hash password mặc định sử dụng thuật toán PBKDF2 (Password-Based Key Derivation Function 2). Dưới đây là công thức thuật toán PBKDF2: Key=PBKDF2(Password, Salt, Iterations-count, Hash-function, Derived-key-len) Giải thích dữ liệu đầu vào PBKDF2 bao gồm: - Password: mật khẩu đầu vào.
- Salt: là một chuỗi bit ngẫu nhiên được tạo để tăng cường tính bảo mật của quá trình băm. - Iterations-count: số lần lặp của quá trình băm giúp tăng độ phức tạp. - Hash-function: là hàm hash được sử dụng, ví dụ như SHA-1, SHA-256, SHA-512. - Derived-key-len: là độ dài của khóa tạo ra.[7] Để tăng độ phức tạp của mật khẩu khi đăng kí, Identity Framwork hỗ trợ các cài đặt được thực hiện bên trong file Startup.
2: Các lựa chọn tăng cường độ mạnh mật khẩu 5 2.2 Ngăn chặn XSRF/CSRF XSRF/ CSRF (Cross-site request forgery) là kiểu tấn công bằng cách kẻ tấn công lừa người dùng thực hiện hành động không mong muốn trong website với tài khoản đăng nhập của chính họ. Cuộc tấn công này thường xảy ra khi người dùng đăng nhập vào trang web sau đó lỡ truy cập vào một trang web khác thuộc quyền quản lí của kẻ tấn công. Khi trang web độc hại được tải, các yêu cầu không mong muốn gửi đến trang web ban đầu mà người dùng đã đăng nhập để thực hiện các hành động xâm nhập, tấn công, chiếm đoạt tài khoản,…[8] ASP.NET Core MVC hỗ trợ ngăn chặn các tấn công XSRF/CSRF qua: - FormTagHelper: để tạo ra một form Html trong Razor Views giúp đưa mã thông báo chống giả mạo vào các phần tử biểu mẫu HTML. Đánh dấu sau trong tệp Razor sẽ tự động tạo mã thông báo chống giả mạo.
3: Cách sử dụng form trong FormTagHelper - Phương thức Html.BeginForm: cũng giúp tự động đưa thông báo chống giả mạo vào các phần tử biểu mẫu HTML. 4: Cách sử dụng phương thức Html.BeginForm - ValidateAntiForgeryToken: thêm trực tiếp mã thông báo chống giả mạo vào một <form>. Đầu tiên, thêm @Html.AntiForgeryToken() vào trong <form>: Hình 2. 5: Cách thêm @Html.AntiForgeryToken() 6 Sau đó, thêm [ValidateAntiForgeryToken] trước Action trong Controller: Hình 2.
6: Cách gọi [ValidateAntiForgeryToken] - AutoValidateAntiforgeryToken: giúp tự động thêm mã thông báo chống giả mạo cho tất cả các action= “post” trong controller mà không cần phải thêm từng ValidateAntiForgeryToken vào các action= “post”.3 Ngăn chặn tấn công chuyển hướng mở Tấn công chuyển hướng mở là do các website thường xuyên chuyển hướng người dùng đến trang đăng nhập khi họ truy cập vào các nguồn tài nguyên yêu cầu xác thực. Việc chuyển hướng bao gồm một tham số chuỗi truy vấn để người dùng có thể quay lại Url ban đầu sau khi đăng nhập thành công. Vì Url đích được chỉ định trong chuỗi truy vấn của yêu cầu nên kẻ tấn công có thể giả mạo chuỗi truy vấn. Chuỗi truy vấn bị giả mạo có thể cho phép website chuyển hướng người dùng đến một trang web độc hại bên ngoài.
Trang web độc hại có thể giả mạo trang đăng nhập của web thực và yêu cầu người dùng nhập lại tài khoản đăng nhập. Nếu người dùng không để ý và đăng nhập lại thì thông tin tài khoản sẽ bị kẻ tấn công xâm nhập, tấn công, chiếm đoạt.[9] Ngoài giả mạo các trang đăng nhập thì kẻ tấn công có thể chuyển hướng người dùng tới nguyên website giả giống hệt website thực với đường dẫn Url gần giống (điều mà người dùng ít quan tâm) và tiến hành tấn công khi đánh cắp khi người dùng thực hiện đăng nhập trên website giả. Để ngăn chặn tấn công chuyển hưởng mở, hãy coi tất cả dữ liệu từ người dùng cung cấp là không tin cậy.