Kiểm tra tiêu đề bảo mật

Dán header phản hồi của một trang —curl -sI https://your-site.example/trong terminal, hoặc khối từ bảng Network của trình duyệt — và nhận mộtHạng từ A+ đến Ftrong danh sách kiểm tra Secure Headers của OWASP:Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options, bảo vệ khung,Referrer-Policy, Permissions-Policy, bộ ba cách ly cross-origin, rò rỉ phiên bản, header đã lỗi thời và cờ cookie — mỗi phát hiện đi cùngnginx, Apache và Expressdòng sửa lỗi. Mọi thứ chạy trong trình duyệt của bạn; trang không bao giờ liên lạc với trang của bạn.
Dòng trạng thái là tùy chọn. Mọi dòng Set-Cookie đều được kiểm tra. Để có một chính sách để chấm ngay từ đầu, dựng một chính sách ở trình tạo CSP; để tách một khối header ra từng dòng, dùng trình phân tích HTTP header.
Chưa có hạng. Dán header phản hồi rồi nhấn Kiểm tra header, hoặc tải một mẫu.
Các dòng sửa cho mọi phát hiện sẽ hiện ở đây sau khi kiểm tra.
Phạm vi của công cụ này so với Kiểm tra bảo mật SSL. Trang này chấm các header phản hồi bảo mật (danh sách OWASP ở trên). Kiểm tra bảo mật SSL chấm thiết lập HTTPS của bạn: chuỗi chứng chỉ, phiên bản giao thức, độ mạnh mật mã và nội dung hỗn hợp. HSTS và cờ cookie xuất hiện ở cả hai trang vì cả hai danh sách đều có chúng, nhưng với góc nhìn khác nhau — chạy cả hai kiểm tra để có bức tranh đầy đủ.
Tự kiểm tra
Chạy lại bộ chấm điểm với các khối header cố định: mẫu tốt ở A+, mẫu xấu ở F với mọi khấu trừ được kích hoạt, từng quy tắc riêng lẻ (phép tính của điểm số), giới hạn rò rỉ phiên bản, ghi chú cookie, ghi chú chất lượng CSP, frame-ancestors được tính là bảo vệ khung, ngưỡng hạng ở hai phía mỗi ranh giới, các đoạn sửa lỗi, và các đường dẫn phủ định. Không gì được gửi đi đâu cả.
Header bảo mật là gì?
Trong một câu: header bảo mật là các header phản hồi chỉ thị cho trình duyệt thực thi một biện pháp bảo vệ mà nó không tự suy ra được — không bao giờ tải script từ nguồn lạ, không bao giờ nói HTTP thuần với máy chủ này nữa, không bao giờ nhúng trang này vào khung — và mỗi header chỉ tốn một dòng cấu hình.
Các header mà trang này chấm
HeaderBảo vệ khỏiGiá trị khuyến nghị của OWASP
Strict-Transport-Securityhạ cấp giao thức và đánh cắp cookie ở yêu cầu HTTP thuần đầu tiênmax-age=63072000; includeSubDomains
Content-Security-Policytấn công XSS, nhúng độc hại, nội dung hỗn hợpdefault-src 'self'; form-action 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests
X-Content-Type-Optionsnhầm lẫn MIME (script được phục vụ như ảnh)nosniff
X-Frame-Options / CSP frame-ancestorsclickjacking (trang của bạn bị kẻ tấn công nhúng vào khung)deny / 'none'
Referrer-Policyrò rỉ URL (có token) sang trang bên thứ bano-referrer
Permissions-Policytrang và nhúng âm thầm dùng camera, micro, vị trítắt mọi tính năng
Cross-Origin-Opener-Policycác cửa sổ khác với tay vào ngữ cảnh duyệt của bạnsame-origin
Cross-Origin-Embedder-Policytải tài nguyên không đăng ký (cho phép cách ly tiến trình)require-corp
Cross-Origin-Resource-Policytài nguyên của bạn được trang khác nhúngsame-origin
Cách tính hạng

Bắt đầu từ 100 và trừ đi: −25 thiếu CSP, −20 thiếu HSTS, −10 mỗi cái thiếu X-Content-Type-Options, Referrer-Policy hoặc bất kỳ bảo vệ khung nào, −5 mỗi cái cho bộ ba cross-origin và Permissions-Policy, −5 cho rò rỉ phiên bản trong Server/X-Powered-By (có giới hạn), và −5 cho X-XSS-Protection khác không. Hạng chữ: 100 = A+, 90+ = A, 80+ = B, 70+ = C, 60+ = D, dưới đó = F. Các ghi chú khuyến nghị (cờ cookie, kiểm soát cache, chất lượng CSP) không bị trừ điểm.

Những lỗi thường gặp
  • Đặt header trên sai phản hồi. Thêm chúng vào mọi phản hồi, kể cả trang lỗi và chuyển hướng — đó là mục đích của always trong add_header ... always; (nginx) và Header always set (Apache).
  • Chỉ kiểm tra trang chủ. Proxy, cache và ứng dụng cũ thường gỡ hoặc ghi đè header chỉ trên một số đường dẫn. Hãy kiểm tra các trang quan trọng: đăng nhập, thanh toán, các endpoint API.
  • Giữ X-XSS-Protection. Bộ kiểm tra mà nó điều khiển tự gây ra lỗ hổng; trình duyệt đã gỡ nó. Giá trị khác không giờ bị trừ điểm có chủ ý — hãy gỡ bỏ và để CSP làm việc đó.
  • Tin rằng X-Frame-Options vẫn hiện hành. Nó không thể cho phép các nguồn cụ thể và không có trong chuẩn CSP; frame-ancestors là thay thế hiện đại. Giữ cả hai trong thời kỳ chuyển đổi là ổn — trang này chấp nhận một trong hai.
  • Gửi banner phiên bản. Server: Apache/2.4.58 (Unix) thu hẹp việc tìm lỗi đã biết của kẻ tấn công mà không có lợi ích nào. Hãy gỡ số phiên bản; giữ số dòng ít.
Câu hỏi thường gặp

Vì sao COOP/COEP/CORP chỉ đáng 5 điểm mỗi cái? Bộ ba là lớp mới nhất, chủ yếu cần khi bạn muốn cách ly tiến trình (SharedArrayBuffer, tăng cường chống Spectre). Trang không có chúng vẫn còn các bảo vệ cốt lõi; có chúng thì một số nhúng cross-origin cần điều chỉnh — đó là lý do chúng nặng ký hơn CSP hay HSTS.

Hạng cao có nghĩa trang an toàn không? Không — nó có nghĩa các header phản hồi đã được đặt. Header bảo mật chỉ là một lớp: cấu hình TLS, xử lý phiên, kiểm tra đầu vào và vá lỗi vẫn quyết định trang có thực sự an toàn hay không. Chạy Kiểm tra bảo mật SSL cho lớp TLS.

Vì sao giá trị Permissions-Policy của tôi dài đến vậy? Đường cơ sở OWASP tắt rõ ràng mọi tính năng, để trình duyệt thêm tính năng mới không âm thầm bật lại chúng. Một giá trị ngắn hơn như camera=(), microphone=(), geolocation=() là một khởi đầu — chỉ cần biết nó để lại những gì.

Tôi có thể kiểm tra header của bất kỳ trang nào từ đây không? Trang này không bao giờ gửi yêu cầu mạng — nó chỉ chấm đúng văn bản bạn dán, nên hoạt động sau tường lửa và trên máy chủ nội bộ, và không có gì bạn kiểm tra rời khỏi máy. Lấy header là một lệnh curl -sI trong terminal.

Còn Clear-Site-Data và X-Permitted-Cross-Domain-Policies thì sao? Hữu ích trong các tình huống hẹp (phản hồi đăng xuất; trình xem PDF/Flash cũ). Ở đây chúng chỉ là khuyến nghị, không chấm điểm — gửi Clear-Site-Data trên mọi phản hồi sẽ xóa bộ nhớ của người dùng mỗi lần tải trang.