Professional Documents
Culture Documents
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
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.
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)
18
2.2.8 Màn hình chỉnh sửa đơn hàng (Admin)
19
2.2.10 Màn hình sửa thông tin nhân viên (Admin)
20
2.2.12 Màn hình danh sách loại giay
21
2.2.14 Màn hình sửa loại giày
22
2.2.16 Màn hình danh sách thương hiệu
23
2.2.18 Màn hình sửa thương hiệu
24
2.2.20 Màn hình danh sách nhà cung cấp
25
2.2.22 Màn hình sửa nhà cung cấp
26
2.2.24 Màn hình danh sách giày
27
2.2.26 Màn hình sửa giày
28
2.2.28 Màn hình đổi thông tin cá nhân
29
2.3. Đặc tả phần mềm
30
Hình 2.3.1 UseCase Xem trang chủ
31
Hình 2.3.4 UseCase Nguoi mua hàng
32
Hình 2.3.6 UseCase Quản lý giày
33
Hình 2.3.8 UseCase Quản lý loại giày
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.
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
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.
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
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
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
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
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
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
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
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
54
2.5.2. Mô hình ERD
STT Thuộc tính Kiểu Miền giá trị Ý nghĩa Ghi chú
55
3 Address nvarchar(MAX) Địa chĩ nhà cung cấp Not null
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
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
Miền Ghi
STT Thuộc tính Kiểu Ý nghĩa
giá trị chú
56
chính null
Not
2 Name nvarchar(MAX) Tên loại giày
null
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
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
Allow
6 CustomerEmail nvarchar(MAX) Email khách hàng
null
Allow
5 isComfirmed bit Tình trạng duyê ̣t
null
Allow
7 address nvarchar(MAX) Địa chỉ khách hàng
null
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
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.
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.
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)
73
Trong file appsettings.json tìm dòng DefautConnecton thay chỗ được tô xanh
thành tên Server của bạn.
Run app
74
Kết quả
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
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
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.
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.
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
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
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.
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
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
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.
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.
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.
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ờ.
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.
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
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();
});
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
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:
95