Công cụ Kiểm tra CORS

Kiểm tra cấu hình Chia sẻ Tài nguyên Nguồn Chéo (CORS) cho bất kỳ URL nào. Kiểm tra các tiêu đề phản hồi Access-Control-*, chạy yêu cầu tiền kiểm (OPTIONS) tùy chọn với Origin/phương thức/tiêu đề tùy chỉnh, và phát hiện các cấu hình sai phổ biến như ký tự đại diện + thông tin xác thực, thiếu Vary: Origin, hoặc allow-headers quá rộng.

Loading…

Giới thiệu Công cụ Kiểm tra CORS

Dán URL của API hoặc trang và xác minh xem trình duyệt có cho phép các yêu cầu nguồn chéo không. Công cụ này phân tích các tiêu đề phản hồi CORS, có thể chạy kiểm tra tiền kiểm (OPTIONS) thực tế, và làm nổi bật các cấu hình rủi ro hoặc bị hỏng (như "*" với thông tin xác thực, thiếu Vary: Origin, hoặc allow-methods/allow-headers yếu).

Tính năng

  • Kiểm tra tiêu đề CORS cho bất kỳ URL công khai nào (Access-Control-* và các tiêu đề liên quan).
  • Mô phỏng tiền kiểm tùy chọn (OPTIONS) với Origin, phương thức yêu cầu và tiêu đề yêu cầu tùy chỉnh.
  • Theo dõi chuyển hướng (tối đa 10) để bạn xác thực điểm cuối cuối cùng mà trình duyệt thực sự truy cập.
  • Xem tiêu đề thô để minh bạch và gỡ lỗi đầy đủ.
  • Phát hiện + thẻ điểm với bộ lọc "chỉ vấn đề" để phân loại nhanh.
  • Phân tích Vary để phát hiện thiếu Vary: Origin và các cạm bẫy liên quan đến bộ nhớ cache CORS khác.
  • Xuất kết quả dưới dạng báo cáo JSON và PDF để kiểm toán, ghi chú và tài liệu.
  • Khuyến nghị tích hợp cho các vấn đề phổ biến: ký tự đại diện+thông tin xác thực, phản ánh Origin, Origin null, thiếu allow-methods/allow-headers, thiếu max-age và allow-headers quá rộng.

🧭 Cách sử dụng for cors-checker

1

Nhập URL mục tiêu

Dán điểm cuối bạn muốn kiểm tra (ví dụ: https://api.example.com/resource).

2

Đặt Origin bạn đang kiểm tra từ

Nhập Origin của ứng dụng frontend của bạn (scheme + host), ví dụ: https://app.example.com. Đây là giá trị trình duyệt gửi trong tiêu đề Origin.

3

Chọn chế độ kiểm tra

Sử dụng Tự động (được khuyến nghị) để phân tích cả tiêu đề phản hồi và hành vi tiền kiểm. Sử dụng Yêu cầu đơn giản nếu bạn muốn một kịch bản không tiền kiểm cụ thể, hoặc Chỉ tiền kiểm để chạy kiểm tra OPTIONS.

4

Cấu hình chi tiết tiền kiểm (nếu áp dụng)

Bật "Chạy Tiền kiểm (OPTIONS)" và đặt Phương thức Yêu cầu cùng với Tiêu đề Yêu cầu (phân cách bằng dấu phẩy) để mô phỏng hành vi tiền kiểm thực tế của trình duyệt (ví dụ: authorization, content-type). Bật "Xem xét thông tin xác thực" nếu trường hợp sử dụng của bạn bao gồm cookie hoặc tiêu đề xác thực.

5

Xem lại phát hiện và xuất

Kiểm tra các phát hiện/thẻ điểm và chi tiết phân tích CORS. Bật "Hiển thị Tiêu đề Thô" khi gỡ lỗi. Xuất JSON/PDF để chia sẻ hoặc lưu trữ trong kiểm toán.

Thông số kỹ thuật

Mô hình yêu cầu

Công cụ kiểm tra các tiêu đề CORS cho một URL mục tiêu và có thể thực hiện yêu cầu tiền kiểm (OPTIONS) tùy chọn bằng cách sử dụng Origin, phương thức và tiêu đề yêu cầu được cung cấp. Hỗ trợ theo dõi chuyển hướng.

Cài đặtHành viMặc định
Chế độ Kiểm traTự động, Yêu cầu đơn giản, hoặc Chỉ PreflightTự động
Chạy Preflight (OPTIONS)Nếu được bật, thực hiện mô phỏng preflight OPTIONSĐã bật
Nguồn gốcGiá trị tiêu đề Origin được sử dụng để phân tích/preflighthttps://example.com
Phương thức Yêu cầuGiá trị Access-Control-Request-Method cho preflightGET
Tiêu đề Yêu cầuAccess-Control-Request-Headers (phân cách bằng dấu phẩy) cho preflightTrống
Theo dõi Chuyển hướngTheo dõi chuỗi chuyển hướng đến URL cuối cùngĐã bật
Số lần Chuyển hướng Tối đaGiới hạn chuyển hướng để ngăn vòng lặp10 (phạm vi 0–20)
Thời gian chờGiới hạn thời gian chờ yêu cầu15000 ms
User-AgentXác định user agent của yêu cầuEncode64Bot/1.0 (+https://encode64.com)
Mạng riêng tưChặn truy cập vào các dải mạng riêng tư vì lý do an toànĐã tắt (không cho phép mạng riêng tư)

Tiêu đề được phân tích (bộ CORS cốt lõi)

Trình phân tích tập trung vào các tiêu đề phản hồi và yêu cầu CORS tiêu chuẩn được sử dụng bởi trình duyệt và các kiểm tra preflight.

Tiêu đềMục đích
Access-Control-Allow-OriginNguồn gốc nào được phép
Access-Control-Allow-CredentialsLiệu cookie/thông tin xác thực có được phép hay không (yêu cầu nguồn gốc không phải ký tự đại diện)
Access-Control-Allow-MethodsCác phương thức được phép cho yêu cầu cross-origin (quan trọng cho preflight)
Access-Control-Allow-HeadersCác header được phép (quan trọng cho Authorization và header tùy chỉnh)
Access-Control-Expose-HeadersHeader nào có thể đọc được bởi JS trên trình duyệt
Access-Control-Max-AgeThời gian preflight có thể được lưu cache bởi trình duyệt
VaryBiến thể khóa cache (ví dụ: Vary: Origin) để ngăn cache poisoning/trộn lẫn
Origin / Access-Control-Request-*Dùng để mô phỏng hành vi preflight

Heuristics (các lỗi CORS phổ biến được đánh dấu)

Các phát hiện dựa trên kiểm tra thực tế và hướng bảo mật để phát hiện cấu hình CORS bị hỏng hoặc rủi ro.

Kiểm traTại sao quan trọng
Wildcard + credentialsAccess-Control-Allow-Origin: * không thể dùng với credentials; trình duyệt sẽ chặn hoặc hành vi không an toàn
Thiếu Vary: OriginNếu phản hồi thay đổi theo Origin nhưng không được cache đúng, cache dùng chung có thể trộn lẫn phản hồi giữa các site
Phản chiếu OriginLặp lại Origin một cách mù quáng có thể vô tình cho phép các origin không đáng tin
Cảnh báo Null OriginOrigin: null có thể xuất hiện trong iframe sandbox hoặc ngữ cảnh file; cho phép nó thường rủi ro
Thiếu Allow-Methods / Allow-HeadersPreflight có thể thất bại nếu server không cho phép rõ ràng phương thức/header
Allow-Headers quá rộngCho phép quá nhiều header có thể mở rộng bề mặt tấn công
Thiếu Max-AgePreflight có thể chạy quá thường xuyên, tăng độ trễ
CORS là cơ chế thực thi của trình duyệt. Server vẫn có thể truy cập cross-origin qua client không phải trình duyệt; coi CORS là một phần của tư thế bảo mật rộng hơn, không phải biện pháp kiểm soát duy nhất.

Dòng lệnh

Sử dụng các lệnh này để tái tạo hành vi CORS và preflight từ terminal của bạn. Chúng hữu ích cho việc gỡ lỗi và xác minh những gì công cụ báo cáo.

macOS / Linux

Kiểm tra header CORS cho yêu cầu thông thường (mô phỏng Origin trình duyệt)

curl -i -H "Origin: https://example.com" https://api.example.com/resource

Tìm Access-Control-Allow-Origin, Access-Control-Allow-Credentials và Vary.

Chạy yêu cầu preflight OPTIONS (phương thức + header)

curl -i -X OPTIONS -H "Origin: https://app.example.com" -H "Access-Control-Request-Method: POST" -H "Access-Control-Request-Headers: authorization, content-type" https://api.example.com/private

Preflight phải trả về đúng Access-Control-Allow-Methods và Access-Control-Allow-Headers để trình duyệt tiếp tục.

Theo dõi chuyển hướng trong khi kiểm tra tiêu đề

curl -iL -H "Origin: https://example.com" https://api.example.com

Hữu ích khi các điểm cuối chuyển hướng đến một máy chủ khác có quy tắc CORS khác.

Windows (PowerShell)

Kiểm tra tiêu đề phản hồi với tiêu đề Origin

$r = Invoke-WebRequest -Uri https://api.example.com/resource -Headers @{ Origin = "https://example.com" }; $r.Headers

Hiển thị các tiêu đề Access-Control-* nếu chúng có mặt.

Nếu frontend của bạn sử dụng cookie hoặc xác thực, hãy tránh CORS quá rộng. Ưu tiên một danh sách cho phép rõ ràng các nguồn đáng tin cậy và bao gồm Vary: Origin khi các phản hồi khác nhau theo nguồn.

Các trường hợp sử dụng

Gỡ lỗi lỗi trình duyệt "CORS bị chặn" ở frontend

Khi fetch/XHR thất bại với lỗi CORS, hãy xác minh xem máy chủ có trả về các tiêu đề Access-Control-* cần thiết cho Origin và loại yêu cầu của bạn không.

  • Xác nhận Access-Control-Allow-Origin khớp với nguồn ứng dụng của bạn
  • Nếu sử dụng cookie/xác thực, kiểm tra Access-Control-Allow-Credentials là true (và origin không phải là ký tự đại diện)
  • Đảm bảo Vary: Origin có mặt khi cho phép nhiều nguồn

Xác thực yêu cầu preflight cho Authorization / tiêu đề tùy chỉnh

Hầu hết các cuộc gọi API được xác thực sẽ kích hoạt preflight do Authorization hoặc các loại nội dung không đơn giản. Công cụ này giúp đảm bảo các phản hồi OPTIONS cho phép phương thức và tiêu đề cần thiết.

  • Xác minh Access-Control-Allow-Methods bao gồm POST/PUT/PATCH/DELETE khi cần
  • Xác minh Access-Control-Allow-Headers bao gồm authorization, content-type và các tiêu đề X-* cần thiết
  • Phát hiện thiếu allow-methods/allow-headers trước khi triển khai

Đánh giá bảo mật chính sách CORS

Các cấu hình sai CORS có thể vô tình làm lộ API riêng tư cho các trang web độc hại (đặc biệt là với thông tin xác thực). Sử dụng các phát hiện để bắt các mẫu nguy cơ cao.

  • Phát hiện origin ký tự đại diện kết hợp với thông tin xác thực
  • Phát hiện các mẫu phản chiếu origin cho phép các trang web tùy ý
  • Cờ cho phép Origin: null khi không có ý định

Cải thiện hiệu suất bằng cách lưu đệm preflight

Các yêu cầu preflight thêm vòng lặp và độ trễ. Max-Age chính xác có thể giảm các kiểm tra preflight lặp lại cho các API ổn định.

  • Xác minh Access-Control-Max-Age có mặt khi phù hợp
  • Giảm các cuộc gọi OPTIONS lặp lại cho lưu lượng API thường xuyên

❓ Frequently Asked Questions

CORS là gì theo cách đơn giản?

CORS (Chia sẻ Tài nguyên Nguồn gốc Chéo) là một cơ chế bảo mật trình duyệt kiểm soát liệu một trang web từ một nguồn gốc (scheme + host + port) có thể đọc phản hồi từ một nguồn gốc khác hay không. Nó dựa vào các tiêu đề phản hồi Access-Control-* cụ thể.

Khi nào trình duyệt gửi yêu cầu preflight (OPTIONS)?

Một preflight được gửi khi yêu cầu không "đơn giản", ví dụ như khi sử dụng các phương thức như POST với một số loại nội dung nhất định hoặc khi gửi các tiêu đề như Authorization hoặc các tiêu đề X-* tùy chỉnh. Trình duyệt kiểm tra quyền qua OPTIONS trước khi gửi yêu cầu thực sự.

Tại sao "Access-Control-Allow-Origin: *" lại nguy hiểm với thông tin xác thực?

Trình duyệt yêu cầu một nguồn gốc rõ ràng khi có liên quan đến thông tin xác thực. Sử dụng ký tự đại diện với thông tin xác thực là không hợp lệ cho các yêu cầu có thông tin xác thực và cho thấy một cấu hình rủi ro. Ưu tiên một danh sách cho phép rõ ràng các nguồn đáng tin cậy.

Tại sao tôi cần Vary: Origin?

Nếu máy chủ của bạn trả về các giá trị Access-Control-Allow-Origin khác nhau tùy thuộc vào Origin của yêu cầu, bộ nhớ đệm phải thay đổi theo Origin để tránh phục vụ một phản hồi dành cho trang web này cho trang web khác. Vary: Origin giúp ngăn chặn việc trộn lẫn bộ nhớ đệm và các vấn đề bảo mật liên quan.

CORS có thể bảo vệ API của tôi khỏi các client không phải trình duyệt không?

Không. CORS được thực thi bởi trình duyệt. Các script chạy bên ngoài trình duyệt (máy chủ, curl, ứng dụng di động) có thể gọi API của bạn bất kể CORS. Hãy sử dụng xác thực, ủy quyền và giới hạn tốc độ để kiểm soát truy cập thực sự.

Tôi nên đặt gì vào "Request Headers" khi kiểm tra preflight?

Liệt kê các tiêu đề mà frontend của bạn sẽ gửi, phân tách bằng dấu phẩy (ví dụ: authorization, content-type, x-request-id). Điều này mô phỏng Access-Control-Request-Headers và kiểm tra xem máy chủ có cho phép chúng không.

Có an toàn khi dán URL vào đây không?

Công cụ thực hiện các yêu cầu phía máy chủ đến URL được cung cấp và chặn các mục tiêu mạng riêng. Tránh bao gồm bí mật trong URL (như token trong chuỗi truy vấn) và ưu tiên các điểm cuối công khai mà bạn tin tưởng.

Pro Tips

Best Practice

Ưu tiên danh sách cho phép các nguồn gốc đáng tin cậy thay vì phản ánh bất kỳ Origin nào. Coi CORS là cấu hình nhạy cảm về bảo mật.

Best Practice

Nếu bạn sử dụng cookie/xác thực, hãy đặt Access-Control-Allow-Credentials: true VÀ trả về một nguồn gốc rõ ràng (không phải "*").

Best Practice

Thêm Vary: Origin khi cho phép nhiều nguồn gốc hoặc chọn nguồn gốc được phép một cách linh động.

Best Practice

Thêm Access-Control-Max-Age hợp lý để giảm độ trễ preflight cho các API ổn định.

Best Practice

Kiểm tra cả đường dẫn yêu cầu preflight và yêu cầu thực tế; một số thiết lập trả về tiêu đề đúng cho GET nhưng thất bại với OPTIONS.

CI Tip

Xuất báo cáo JSON và lưu chúng cùng với các thay đổi cấu hình API gateway để nhanh chóng phát hiện hồi quy.

Additional Resources

Other Tools

Công cụ Kiểm tra CORS — kiểm tra tiêu đề Access-Control-* và tiền kiểm (OPTIONS) | Encode64