Yêu cầu 1: Cài đặt và sử dụng gói helmet trong project1.. Các bước thực hiện B1: Cài đặt helmet bản 3.21.3 với câu lệnh sau: npm install helmet@3.21.3 B2: Kiểm tra file package.json
Trang 1Yêu cầu 1: Cài đặt và sử dụng gói helmet trong project
1 Các bước thực hiện
B1: Cài đặt helmet bản 3.21.3 với câu lệnh sau: npm install helmet@3.21.3
B2: Kiểm tra file package.json để xem helmet đã được thêm vào chưa
B3: Sử dụng helmet trong project bằng cách thêm dòng lệnh sau: let helmet = require(‘helmet’);
Trang 2 B4: Kiểm tra kết quả
2 Giải thích chi tiết
a) File package.json là gì, vì sao khi cài package lại tự xuất hiện file này?
File package.json là phần cốt lõi của hệ sinh thái Node.js Đây là file chứa thông tin về project, bao gồm tên, phiên bản, mô tả, tác giả, script thực thi chính và đặc biệt là danh sách các package mà dự án sử dụng Khi cài đặt package, nếu project chưa có file package.json, nó sẽ tự động tạo file này để lưu thông tin về package helmet vừa cài đặt
b) Lệnh let helmet = require('helmet'); là gì?
Khi cài đặt xong package, để có thể sử dụng helmet thì ta cần phải import package đó vào trong script Cũng giống như python, khi muốn sử dụng các thư viện thì ta cần phải dùng lệnh import <tên package> và từ đó gọi các hàm có trong package
import os
os.listdir()
Tương tự với Node.js, nếu ta muốn sử dụng helmet thì ta phải import helmet vào thì mới sử dụng được
const helmet = require('helmet');
// enabling the Helmet middleware
app.use(helmet())
Trang 3Yêu cầu 2: Ẩn thông tin nguy hiểm bằng helmet.hidePoweredBy()
1 Các bước thực hiện
B1: Kiểm tra header
B2: Để ẩn header X-Powered-By, ta thêm dòng lệnh sau: app.use(helmet.hidePoweredBy())
B3: Kiểm tra lại header
Trang 4 B4: Để thay giá trị của X-Powered-By thành giá trị giả mạo, ta dùng lệnh sau:
app.use(helmet.hidePoweredBy({ setTo: "PHP 4.2.0" }))
B5: Kiểm tra lại header
B6: Kiểm tra kết quả
Trang 52 Giải thích chi tiết
a) Header X-Powered-By là gì?
X-Powered-By là header bổ sung thêm, không hợp tiêu chuẩn nhưng rất phổ biến (Các header có tiền tố X-
thường là header bổ sung thêm) Header này thường được đính kẻm trong response cho biết công nghệ nào được
sử dụng ở phía backend
b) Vì sao cần phải ẩn header X-Powered-By?
Vì nếu attacker biết backend sử dụng công nghệ gì, attacker có thể tìm thêm version mà backend đang sử dụng
để từ đó khai thác các lỗ hổng đã được phát hiện
Trang 6Yêu cầu 3: Giảm nguy cơ bị Clickjacking với helmet.frameguard()
1 Các bước thực hiện
B1: Kiểm tra chức năng iframe
B2: Để chống bị iframe, ta thêm lệnh sau: app.use(helmet.frameguard({ action: "deny" }))
Trang 7 B3: Kiểm tra kết quả
2 Giải thích chi tiết
a) Lỗ hổng clickjacking là gì?
Clickjacking là một hình thức tấn công đánh lừa người dùng nhấp chuột vô ý vào một đối tượng trên website Khi nhấp chuột vào một đối tượng trên màn hình, người dùng nghĩ là mình đang click vào đối tượng đó nhưng thực chất họ đang bị lừa click vào một đối tượng khác (đã bị làm mờ hay ẩn đi) Kẻ tấn công có thể sử dụng kỹ thuật tấn công này cho nhiều mục đích Đánh cắp tài khoản người dùng, lừa click vào quảng cáo để kiếm tiền, lừa like page hoặc nguy hiểm hơn là cài một webshell lên máy chủ web
Trang 8Yêu cầu 4: Giảm nguy cơ bị tấn công XSS với helmet.xssFilter()
1 Các bước thực hiện
B1: Để giảm nguy cơ bị tấn công XSS, ta thêm lệnh sau: app.use(helmet.xssFilter())
B2: Kiểm tra kết quả:
2 Giải thích chi tiết
a) Tấn công XSS là gì
Trang 9Yêu cầu 5: Tránh suy diễn loại MIME trong phản hồi với helmet.noSniff()
1 Các bước thực hiện
B1: Thêm lệnh sau: app.use(helmet.noSniff())
B2: Kiểm tra kết quả
Trang 102 Giải thích chi tiết
Trang 11Yêu cầu 6: Chặn IE mở HTML không uy tín với helmet.ieNoOpen()
1 Các bước thực hiện
B1: Thêm lệnh sau: app.use(helmet.ieNoOpen())
B2: Kiểm tra kết quả
Trang 122 Giải thích chi tiết
Trang 13Yêu cầu 7: Yêu cầu trình duyệt chỉ truy cập HTTPS với helmet.hsts()
1 Các bước thực hiện
B1: Thêm lệnh sau: app.use(helmet.hsts({ maxAge: 7776000 }));
B2: Kiểm tra kết quả
Trang 142 Giải thích chi tiết
Trang 15Yêu cầu 8: Vô hiệu hóa việc load DNS trước khi load resource với helmet.dnsPrefetchControl()
1 Các bước thực hiện
B1: Thêm lệnh sau: app.use(helmet.dnsPrefetchControl());
B2: Kiểm tra kết quả
Trang 162 Giải thích chi tiết
Trang 17Yêu cầu 9: Vô hiệu hóa bộ nhớ đệm máy khách với helmet.noCache()
1 Các bước thực hiện
B1: Thêm lệnh sau: app.use(helmet.noCache());
B2: Kiểm tra kết quả
Trang 182 Giải thích chi tiết
Trang 19Yêu cầu 10: Thiết lập Chính sách bảo mật nội dung với helmet.contentSecurityPolicy()
Trang 20B2: Kiểm tra kết quả
2 Giải thích chi tiết
Trang 21Yêu cầu 11: Cấu hình helmet sử dụng helmet cha
1 Các bước thực hiện
B1: Thêm lệnh sau:
B2: Kiểm tra kết quả
2 Giải thích chi tiết
Trang 22Yêu cầu 12: Tìm hiểu về hash BCrypt
1 Các bước thực hiện
B1: Cài đặt bcrypt với lệnh sau: npm install bcrypt
B2: Kiểm tra file package.json để xem helmet đã được thêm vào chưa
Trang 23B2: Kiểm tra kết quả
2 Giải thích chi tiết
Trang 24Yêu cầu 13:
1 Các bước thực hiện
B1: Thêm lệnh sau: B2: Kiểm tra kết quả
2 Giải thích chi tiết
Trang 25Yêu cầu 14:
1 Các bước thực hiện
B1: Thêm lệnh sau: B2: Kiểm tra kết quả
2 Giải thích chi tiết