Header là công cụ giao tiếp chính giữa server của bạn và trình duyệt của khách, nó thường có mục đích chính là gia tăng bảo mật, ngoài ra vài mục đích quan trọng khác là điều chỉnh cache & ẩn danh.
Ví dụ một mẫu header:
header {
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
X-XSS-Protection "0"
Referrer-Policy "strict-origin-when-cross-origin"
Permissions-Policy "camera=(), microphone=(), geolocation=(), interest-cohort=()"
# Strict-Transport-Security "max-age=31536000; includeSubDomains"
-Server
-X-Powered-By
}
–
Giải thích:
X-Content-Type-Options "nosniff": chống việc thực thi các file giả mạo định dạng, để ngăn mã độc được thực thi.X-Frame-Options "SAMEORIGIN": ngăn ngừa việc dùng thẻ iframe để nhúng website của bạn vào một trang web khác, rồi sử dụng nó để lừa người dùng.SAMEORIGINlà nói rằng chỉ chính website của bạn có quyền nhúng nó mà thôi. Một giá trị khác là DENY, nó sẽ từ chối tất cả các yêu cầu nhúng (X-Frame-Options "DENY").X-XSS-Protection "0": Tắt tính năng lọc XSS có sẵn trong trình duyệt, hơi ngược đời, vì tính năng lọc XSS giúp tăng bảo mật, nhưng chỉ thời gian đầu. Về sau tính năng này bị lợi dụng, và tấn công ngược lại website, do vậy giờ phải thiết lập nó là không cần dùng! Các trình duyệt hiện đại như Chrome đã tắt theo mặc định, nhưng các trình duyệt cũ có thể không, do vậy vẫn nên có chỉ thị cụ thể.Referrer-Policy "strict-origin-when-cross-origin": để chỉ thị rằng bạn không tiết lộ đường dẫn đầy đủ website đang truy cập cho website khác khi bạn click vào link website khác đó để xem tiếp. Nhưng nếu là website nội bộ (các trang cùng nằm trên web) thì có tiết lộ để tiện cho việc phân tích. Cái này nhằm bảo mật để tránh tiết lộ các thông tin nhạy cảm có thể xuất hiện trên đường dẫn đầy đủ. Mặc định các trình duyệt hiện đại đã hỗ trợ sẵn tính năng này.Permissions-Policy "camera=(), microphone=(), geolocation=(), interest-cohort=()": chặn các tính năng không cần thiết trên website, bao gồm camera, microphone, geolocation (định vị), interest-cohort (một dạng định danh sở thích theo nhóm phục vụ cho quảng cáo). Vì hầu hết các trang, và gần như toàn bộ blog đều không cần các tính năng trên, chúng ta tắt đi như vậy để đảm bảo tối thiểu hóa các rủi ro. Hiện tạiinterest-cohort=(), bạn có thể thay nó bằngbrowsing-topics=().Strict-Transport-Security "max-age=31536000; includeSubDomains": yêu cầu trình duyệt của người dùng trong vòng 1 năm chỉ truy cập website và các subdomain của website này (website đang được cấu hình bằng lệnh trên) bằng liên kết bảo mật https. Với cấu hình redirect từ http sang https của Caddy thì chúng ta đã yêu cầu trình duyệt phục vụ trang qua https, nhưng lần gửi dữ liệu đầu tiên, nếu người dùng truy cập qua http, thì dữ liệu đến máy chủ vẫn là dạng không bảo mật. Khi có chỉ thị trên, thì từ lần truy cập thứ 2 đổ đi, kể cả người dùng sử dụng http, trình duyệt của họ sẽ chuyển ngay nó thành https, tức là dữ liệu đến máy chủ là https.- Để ngay cả lần truy cập đầu tiên cũng phục vụ bằng liên kết bảo mật https bạn có thể dùng thêm thuộc tính preload, cụ thể nó sẽ thế này:
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload". Tuy nhiên để tính năng này chính thức hoạt động, bạn cần vàohstspreload.orgđể đăng ký, và một số trình duyệt sẽ biết nó (khi bạn được đưa vào danh sách chính thức, có thể mất vài tháng) cần được phục vụ ngay lập tức bằng https (không cần đến server của web thì mới biết). Nhìn chung tính năng này cần cho các trang có yêu cầu rất cao về bảo mật như ngân hàng, trang lưu trữ đăng nhập các thông tin rất quan trọng. Còn các trang blog có thể không cần thiết. - Trong đoạn mã trên #
Strict-Transport-Security "max-age=31536000; includeSubDomains"nó được để dấu #, nghĩa là chưa áp dụng chính thức, tức là sau khi trang có https thì bạn mới nên bật (dù Caddy làm điều này rất tốt và nhanh, nhưng để dự phòng thì bạn vẫn cần phải thấy https trước đã). Ngoài ra nếu bạn là dev, có thể cần dùng nhiều đến subdomain cho các dự án, thì việc loại bỏ thuộc tínhincludeSubDomainscó thể cần thiết để nó đỡ ép mọi subdomain phải có liên kết bảo mật. -Server: ẩn thông tin rằng website sử dụng server Caddy. Điều này có chút lợi ích nhỏ theo nghĩa nếu ai muốn tấn công bạn, họ càng biết ít về bạn thì họ sẽ khó khăn hơn.-X-Powered-By: tương tự mục đích trên, nhưng là ẩn ngôn ngữ hoặc framework đang dùng (ví dụ PHP, Node, Python)…