blog detail banner

TTLab Academy Blogs

HTTP Headers, HTTP Security Headers là gì? Cách thiết lập HTTP Security Headers để ngăn chặn tấn công

list-icon

Mục lục

plus-iconminus-icon
HTTP Strict Transport Security (HSTS)
Content Security Policy (CSP)
Cross Site Scripting Protection (X-XSS)
X-Frame-Options
X-Content-Type-Options
Cách kiểm tra HTTP security headers

HTTP Headers là một phần của giao thức HTTP từ phiên bản 1.0, nó được dùng để định nghĩa các metadata trong cả HTTP request và response. Trong khi HTTP body thường được sử dụng và đọc bởi người dùng, thì metadata chỉ được xử lý bởi trình duyệt web.

HTTP Headers, HTTP Security Headers là gì Cách thiết lập HTTP Security Headers để ngăn chặn tấn công.png

Trong một request, metadata thường bao gồm các thông tin như:

  • Ngôn ngữ của request

  • Cookies

  • Thông tin đăng nhập của website

  • Dữ liệu cache

Trong một response, metadata thường bao gồm các thông tin như:

  • Dữ liệu Server

  • Thời gian, ngày tháng

  • Thông tin đăng nhập do client đặt

  • Tuỳ chọn bộ nhớ cache

Security Headers là các HTTP headers để xác định xem nên kích hoạt hay hủy kích hoạt một bộ các biện pháp phòng ngừa bảo mật trên trình duyệt web. HTTP Security Headers là một phần cơ bản của bảo mật website, giúp chống lại các cuộc tấn công mà website có nguy cơ gặp phải cao như: MIME types, clickjacking, code injection, XSS...

Trong bài viết này, chúng tôi sẽ đưa ra 5 HTTP Security headers quan trọng nhất mà bạn nên cấu hình trên web server để nâng cao bảo mật cho website, bao gồm vai trò của từng header là gì và những cuộc tấn công nào có thể được thực hiện khi cấu hình sai header đó:

HTTP Strict Transport Security (HSTS)

HTTP Strict Transport Security.png

  • HSTS là một cơ chế buộc các trình duyệt sử dụng kết nối web an toàn. Nếu một trang web được trang bị HSTS, sever sẽ buộc trình duyệt giao tiếp qua HTTPS (HTTP Secure). Điều này ngăn chặn chuyển hướng request từ HTTPS đến HTTP.

  • Trước khi cấu hình header này, cần đảm bảo tất cả website có thể truy cập được qua HTTPS nếu không chúng sẽ bị chặn.

  • HSTS header được hỗ trợ trên tất cả các phiên bản mới nhất của trình duyệt như IE, Firefox, Opera, Safari và Chrome.

  • Có ba tham số cấu hình như sau:

    • Max-age: Thời lượng (Tính bằng giây) để xác định thời gian được truy cập server chỉ thông qua HTTPS. Giá trị mặc định là 31536000 giây (1 năm). Đây là độ tuổi tối đa mà HSTS hợp lệ. Server cập nhật chúng với mọi response mới, do đó ngăn không cho nó hết hạn.

    • IncludeSubDomains: Cấu hình subdomains, kiểm soát các subdomains của website.

    • Preload: Sử dụng nếu muốn đưa website vào danh sách preload. Đây là danh sách các trang web được mã hóa cứng vào Chrome. Sử dụng form này để thêm. Danh sách này được duy trì bởi Google nhưng các trình duyệt khác cũng sử dụng nó. Danh sách preload có thể được tìm thấy ở đây.

  • Nguy cơ tấn công: Nếu không kích hoạt HSTS, khi nạn nhân kết nối với Wi-Fi mở nằm trong sự kiểm soát của kẻ tấn công, sau đó truy cập một website qua HTTP sẽ cho phép kẻ tấn công chặn request và đọc thông tin gửi lên server. Nếu người dùng đã truy cập website trước đó, các HSTS headers được lưu trong trình duyệt tự động kết nối server qua HTTPS.

  • Cú pháp:

    Strict-Transport-Security: max-age=
    Strict-Transport-Security: max-age=; includeSubDomains
    Strict-Transport-Security: max-age=; preload
  • Ví dụ:

    Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Content Security Policy (CSP)

X-Content-Type-Options.webp

  • CSP cung cấp cho quản trị viên kiểm soát website bằng cách hạn chế tài nguyên mà người dùng được phép tải trong website. Có thể đưa whitelist vào nội dung của website. Nếu được triển khai đúng cách, header này sẽ ngăn chặn việc khai thác Cross-Site Scripting (XSS) , ClickJacking và HTML... Mặc dù không loại bỏ hoàn toàn các khả năng tấn công này, nhưng chắc chắn giảm thiểu thiệt hại. Hầu hết các trình duyệt chính đều hỗ trợ CSP.

  • Được giới thiệu vào tháng 11 năm 2012, CSP thêm một lớp bảo mật chống lại nhiều lỗ hổng bảo mật website. CSP sẽ trở thành công cụ quan trọng nhất cho bảo mật phía máy khách trong tương lai gần, vì nó có thể thay thế cho các tiêu đề bảo mật như: X-Frame-Options, X-XSS-Protection, là 2 cấu hình không được bật theo mặc định.

  • Tất cả các trình duyệt không hỗ trợ CSP, vì vậy cần xác minh trước khi triển khai.

  • Có nhiều tham số có thể thực hiện CSP. Tuy nhiên, chúng ta hãy xem 2 tham số được sử dụng nhiều nhất:

    • default-src: Tải mọi thứ từ một

    •  nguồn xác định.

    • script-src: Chỉ tải các tập lệnh từ nguồn được xác định.

  • Cú pháp:

    Content-Security-Policy: <policy-directive>; <policy-directive>
  • Ví dụ:

    Content-Security-Policy: script-src 'self' https://example.com

    CSP này chỉ cho phép tải mọi thứ qua domain hiện tại hoặc qua https://example.com.

Cross Site Scripting Protection (X-XSS)

Cross Site Scripting Protection.webp

  • X-XSS header bảo vệ chống lại các cuộc tấn công Cross-Site Scripting (XSS). Bộ lọc này nhằm phát hiện đầu vào HTML nguy hiểm và ngăn website tải hoặc xóa các tập lệnh độc hại.

  • X-XSS được bật trong Chrome, IE và Safari theo mặc định, nó có 4 chế độ:

    • 0: Bộ lọc XSS bị vô hiệu hóa.

    • 1: Bộ lọc XSS được kích hoạt và bảo vệ trang nếu phát hiện tấn công.

    • 1; mode=block: Bộ lọc XSS được kích hoạt và ngăn chặn hiển thị trang nếu phát hiện tấn công.

    • 1; report=https://example.com: Bộ lọc XSS được kích hoạt và báo cáo vi phạm nếu phát hiện cuộc tấn công.

  • Cú pháp:

    X-XSS-Protection: 0
    X-XSS-Protection: 1
    X-XSS-Protection: 1; mode=block
    X-XSS-Protection: 1; report=<reporting-uri>
  • Ví dụ:

    X-XSS-Protection: 1; mode=block; report=https://example.com

X-Frame-Options

X-Frame-Options.webp

  • Một kỹ thuật giả mạo có tên là "Clickjacking" khá phổ biến. Trong kỹ thuật này, kẻ tấn công đánh lừa người dùng nhấp vào thứ gì đó không có ở website. Khi người dùng đang ở trên trang web chính thức, nhưng có một process (tiến trình) khác đang chạy nền. Trong quá trình này, có thể có những thông tin của người dùng đang bị đánh cắp. X-Frame-Options giúp bảo vệ chống lại hình thức tấn công kiểu này bằng cách vô hiệu hóa các iframe có trên website. Nói cách khác, nó không cho phép người khác nhúng iframe vào trong website của bạn.

  • Có 3 tùy chọn cho X-Frame-Options:

    • SAMEORIGIN: Iframe trong website chỉ được phép từ cùng một nguồn gốc.

    • DENY: Ngăn chặn bất kỳ tên miền nào nhúng nội dung vào website bằng cách sử dụng iframe.

    • ALLOW-FROM: Chỉ cho phép iframe trên URI cụ thể.

  • Nguy cơ tấn công:

    • Kẻ tấn công có thể lừa người dùng truy cập một website độc hại, một iframe vô hình được cài sẵn. Khi người dùng nhấp vào iframe, các các thông tin bị đánh cắp và được gửi đến server khác. Dẫn đến việc lộ thông tin hoặc kẻ đánh cắp có thể thực hiện hành vi xấu như xoá tài khoản, chuyển tiền,...

  • Cú pháp:

    X-Frame-Options: DENY
    X-Frame-Options: SAMEORIGIN
    X-Frame-Options: ALLOW-FROM https://tokyotechlab.com

X-Content-Type-Options

X-Content-Type-Options.webp

  • X-Content-Type header cung cấp biện pháp ngăn chặn rủi ro bảo mật theo MIME type. Nó hướng dẫn trình duyệt theo các MIME type được chỉ định trong tiêu đề. Nếu header này trống hoặc bị thiếu, trình duyệt phân tích nội dung và hiển thị theo cách phù hợp nhất.

  • X-Content-Type hoạt động như sau:

    • Trình duyệt web sẽ request (yêu cầu) một tập tin. Server sẽ response (trả về) một tệp với X-Content-Type header.

    • Trình duyệt phân tích tệp này xác định định dạng tệp.

    • Sau khi thực hiện phân tích, trình duyệt sẽ so sánh kết quả với kết quả được gửi bởi máy chủ. Nếu có sự không phù hợp, trình duyệt sẽ sử dụng định dạng đã xác định.

    • Điều này có thể dẫn đến một lỗ hổng bảo mật. Để ngăn trình duyệt phân tích nội dung của trang và quyết định sử dụng MIME type nào, hãy sử dụng tiêu đề X-Content-Type-Options với giá trị nosniff

  • Nguy cơ tấn công:

    • Website cho phép người dùng tải lên một tệp hình ảnh và xác nhận phần mở rộng của nó. Người dùng tải lên một tệp hình ảnh với phần mở rộng jpg hoặc png nhưng tệp này có chứa mã HTML độc hại. Trình duyệt sẽ xác định tệp là HTML và thực thi trong trình duyệt.

  • Header này dành riêng cho trình duyệt IE và Chrome.

  • Cú pháp:

    X-Content-Type-Options: nosniff

Cách kiểm tra HTTP security headers

  • Kiểm tra thông qua tab network trên trình duyệt

Cách kiểm tra HTTP security headers.png

Cách kiểm tra HTTP security headers..png

Trên đây là những kiến thức cơ bản về HTTP Headers và cách thiết lập HTTP Security Headers để ngăn chặn tấn công từ bên ngoài. Hãy follow Tokyo Tech Lab Academy để biết thêm nhiều kiến thức về lập trình nhé!

Tokyo Tech Lab Academy

Tags:
HTTP Security HeadersHTTP Headers
facebook icon
Chia sẻ
Tokyo Tech Lab

Thầy tận tâm, trò nâng tầm

Khóa học

    Liên hệ

    • email icon

    • phone icon

    • location icon

    © 2023 Tokyo Tech Lab Academy. All Rights Reserved.