Bảo mật28/10/202425 phút đọc4.7K lượt xem

Hướng dẫn cấu hình HTTP Security Headers & Content Security Policy (CSP)

Cẩm nang kỹ thuật chuyên sâu về cấu hình tiêu đề bảo mật máy chủ đạt điểm A+ tuyệt đối trên SecurityHeaders.com: Thiết lập Content-Security-Policy chống XSS, kích hoạt Strict-Transport-Security (HSTS), chống Clickjacking và vô hiệu hóa API phần cứng với Permissions-Policy.

Hướng dẫn cấu hình HTTP Security Headers & Content Security Policy (CSP)

Khi một người dùng truy cập vào website của bạn, trình duyệt web của họ sẽ gửi yêu cầu và nhận lại các phản hồi từ máy chủ (HTTP Response). Ngoài phần nội dung HTML, máy chủ còn gửi kèm các thông tin điều khiển vô hình gọi là HTTP Headers.

Nếu máy chủ không được cấu hình các Tiêu đề bảo mật (HTTP Security Headers), trình duyệt sẽ ở trạng thái thụ động và trở thành 'con mồi' dễ dàng cho các cuộc tấn công tinh vi như Cross-Site Scripting (XSS), Lừa đảo nhấp chuột (Clickjacking), Tấn công hạ cấp SSL Strip và Đánh cắp phiên đăng nhập (Session Hijacking).

Theo thống kê từ công cụ kiểm tra an ninh mạng toàn cầu SecurityHeaders.com, hơn 80% website doanh nghiệp hiện nay bị xếp loại F hoặc D do thiếu vắng hoàn toàn các lớp bảo vệ này. Dưới đây là hướng dẫn kỹ thuật chi tiết giúp bạn thiết lập đầy đủ bộ tiêu đề bảo mật máy chủ để đạt điểm A+ tuyệt đối.

Content-Security-Policy (CSP Level 3) - Lá Chắn Triệt Tiêu 100% Tấn Công XSS

Content-Security-Policy (CSP) là tiêu đề bảo mật quan trọng và phức tạp nhất. CSP cho phép bạn khai báo danh sách trắng (Whitelist) các nguồn tài nguyên (Scripts, Stylesheet, Images, Fonts, API) được phép tải và thực thi trên website:

Các chỉ thị cốt lõi của CSP:

default-src 'self': Chỉ cho phép nạp tài nguyên từ chính tên miền gốc của website.
script-src 'self' https://www.googletagmanager.com https://connect.facebook.net: Chỉ cho phép chạy các đoạn mã Javascript từ nội bộ và các dịch vụ theo dõi đáng tin cậy. Kẻ tấn công tiêm mã độc lạ từ bên ngoài sẽ bị trình duyệt chặn đứng ngay lập tức.
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com: Cho phép nạp định dạng CSS từ nội bộ và Google Fonts.
img-src 'self' data: https:: Cho phép hiển thị hình ảnh từ máy chủ và các nguồn HTTPS an toàn.
frame-ancestors 'none': Cấm tuyệt đối việc nhúng trang web của bạn vào bất kỳ thẻ <iframe> nào.
upgrade-insecure-requests: Tự động nâng cấp toàn bộ yêu cầu HTTP cũ sang HTTPS trước khi gửi đi.

Strict-Transport-Security (HSTS) - Ép Buộc Kết Nối HTTPS Toàn Trình

Ngay cả khi bạn đã cài chứng chỉ SSL, kẻ xấu vẫn có thể thực hiện kỹ thuật tấn công SSL Strip để ép trình duyệt người dùng kết nối qua giao thức HTTP không mã hóa tại các mạng Wifi công cộng:

Tiêu đề HSTS chuẩn: Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Ý nghĩa kỹ thuật:

- max-age=31536000: Yêu cầu trình duyệt phải ghi nhớ và luôn luôn kết nối qua HTTPS trong suốt 1 năm (31.536.000 giây).

- includeSubDomains: Áp dụng quy tắc này cho toàn bộ tên miền phụ (subdomain).

- preload: Đăng ký website vào danh sách HSTS Preload List của Google Chrome. Khi đó, trình duyệt đã biết website của bạn bắt buộc dùng HTTPS ngay cả trước lần truy cập đầu tiên.

X-Frame-Options - Chống Tấn Công Lừa Đảo Clickjacking

Clickjacking là kỹ thuật mà kẻ xấu tạo một trang web giả mạo rồi nhúng website của bạn vào một khung <iframe> trong suốt đặt đè lên một nút bấm trúng thưởng để lừa người dùng bấm vào chuyển tiền hoặc thích trang mà không hề hay biết:

Cấu hình: X-Frame-Options: SAMEORIGIN (hoặc DENY).
Tác dụng: Trình duyệt sẽ từ chối hiển thị website nếu nó bị nhúng vào iframe của một tên miền khác.

X-Content-Type-Options - Ngăn Chặn Đánh Tráo Định Dạng Tệp (MIME Sniffing)

Một số trình duyệt cũ có thói quen tự ý đoán định dạng tệp tin (MIME-sniffing). Hacker có thể tải lên một tệp ảnh đại diện avatar.jpg nhưng thực chất bên trong chứa mã độc Javascript nguy hiểm:

Cấu hình: X-Content-Type-Options: nosniff.
Tác dụng: Ép trình duyệt phải tuân thủ nghiêm ngặt định dạng tệp tin do máy chủ khai báo, ngăn chặn thực thi mã độc trá hình.

Referrer-Policy và Permissions-Policy

Referrer-Policy: Referrer-Policy: strict-origin-when-cross-origin — Bảo vệ quyền riêng tư của khách hàng, ngăn chặn việc để lộ các thông số URL nhạy cảm khi khách bấm vào liên kết dẫn sang trang khác.
Permissions-Policy: Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=() — Vô hiệu hóa triệt để quyền truy cập vào Camera, Microphone và Vị trí địa lý từ các script bên thứ ba.

Hướng Dẫn Cấu Hình Mẫu Trên Máy Chủ Nginx Chuẩn Điểm A+

Mở tệp cấu hình Nginx của bạn (/etc/nginx/sites-available/default) và thêm các dòng sau vào khối server { ... } (port 443 HTTPS):

`nginx

# HTTP Security Headers đạt điểm A+ trên SecurityHeaders.com

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com data:; img-src 'self' data: https:; frame-ancestors 'self'; upgrade-insecure-requests;" always;

add_header X-Frame-Options "SAMEORIGIN" always;

add_header X-Content-Type-Options "nosniff" always;

add_header Referrer-Policy "strict-origin-when-cross-origin" always;

add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()" always;

`

Lưu ý quan trọng: Luôn thêm từ khóa always ở cuối mỗi dòng để đảm bảo Nginx vẫn gửi đầy đủ các tiêu đề bảo mật này ngay cả khi gặp trang lỗi 404 hoặc 500.

Bảng Checklist 15 Tiêu Chuẩn Cấu Hình Security Headers Đạt Điểm A+ Tuyệt Đối

Cấu hình tiêu đề HSTS với thời gian max-age tối thiểu 1 năm (31536000 giây).
Kích hoạt cờ includeSubDomainspreload cho HSTS.
Khai báo tiêu đề Content-Security-Policy (CSP) với danh sách trắng domain rõ ràng.
Cấu hình chỉ thị upgrade-insecure-requests trong CSP.
Cấu hình X-Frame-Options: SAMEORIGIN để chống Clickjacking.
Cấu hình X-Content-Type-Options: nosniff để chống MIME-type sniffing.
Thiết lập Referrer-Policy: strict-origin-when-cross-origin.
Thiết lập Permissions-Policy khóa Camera, Microphone và Geolocation.
Thêm từ khóa always sau mỗi chỉ thị add_header trên máy chủ Nginx.
Ẩn thông tin phiên bản máy chủ (server_tokens off; trên Nginx).
Xóa bỏ tiêu đề X-Powered-By để không để lộ ngôn ngữ lập trình phía backend.
Kiểm thử chính sách CSP trên công cụ Google CSP Evaluator.
Đăng ký tên miền trên trang kiểm duyệt hstspreload.org.
Quét kiểm tra toàn diện trên SecurityHeaders.com đạt điểm A+ màu xanh lá cây.
Kiểm tra định kỳ hàng tháng để cập nhật thêm các nguồn tài nguyên mới vào CSP.

Tại W Four Tech, toàn bộ hệ thống máy chủ và website đều được các kỹ sư bảo mật của chúng tôi cấu hình nghiêm ngặt theo tiêu chuẩn OWASP và SecurityHeaders.com điểm A+, mang lại sự an tâm tuyệt đối cho doanh nghiệp và khách hàng của bạn!

Thẻ bài viết:#Security Headers#Content Security Policy#CSP#HSTS#Nginx Security#OWASP#Cyber Security#Chống XSS

Lê Văn Phúc

Security Engineer tại W Four Tech

Tất cả bài viết

Bạn đang cần thiết kế website chuẩn SEO chuyên nghiệp?

Liên hệ ngay với W Four Tech để nhận tư vấn giải pháp tối ưu hóa website, tăng tốc độ tải trang và bứt phá thứ hạng Google.