Cross-Origin Resource Sharing (CORS) về cơ bản cho phép miền của bên thứ ba truy cập vào tài nguyên của website. Bài viết này sẽ hướng dẫn các developer cách đơn giản để có thể bật CORS cho mục đích chạy ứng dụng web.
CORS là gì?
CORS là một tính năng bảo mật có mục đích ngăn chặn truy cập trái phép. Nó là viết tắt của cụm từ Cross-Origin Resource Sharing.
Trong trình duyệt, thuật ngữ “origin” dùng để chỉ các giao thức và tên máy chủ của một URL. Chẳng hạn, nếu URL đầy đủ của bạn là https://example.com/directory/page.html thì origin sẽ là https://example.com. Do đó, origin sẽ nhóm một tập hợp các URL dưới sự kiểm soát của cùng một cá nhân hoặc tổ chức có thể chia sẻ những yếu tố như cookie một cách an toàn theo chính sách same-origin. Chính sách này hạn chế website thực hiện các yêu cầu HTTP đối với tài nguyên của bên thứ ba.
CORS là một cơ chế dựa trên HTTP header chỉ định các ngoại lệ đối với chính sách same-origin và cho phép các cross-origin request trong các trường hợp cụ thể. Cross-origin request là một website tại một origin, chẳng hạn https://example.com, truy cập tài nguyên trên một origin khác, như https://example.net.
Lưu ý rằng CORS chỉ hoạt động để cho phép yêu cầu đến trang web mà bạn kiểm soát. Việc bật CORS trên site đưa ra yêu cầu sẽ không khắc phục được bất kỳ sự cố nào mà bạn có thể gặp phải khi trình duyệt chặn cross-origin request.
Tính năng này cũng tiềm ẩn nguy cơ xảy ra các cuộc tấn công giữa các miền nếu chính sách CORS của website được định cấu hình và triển khai kém. Đây cũng không phải là biện pháp chống lại các cuộc tấn công cross-origin như giả mạo yêu cầu trên web (CSRF).
Chính sách same-origin là gì?
Chính sách này hạn chế khả năng trang web tương tác với các tài nguyên bên ngoài miền nguồn. Same-origin policy đã được xác định từ nhiều năm trước để đối phó với các tương tác giữa các miền có thể gây hại, chẳng hạn như việc một trang web lấy cắp dữ liệu cá nhân từ một website khác.
Chính sách thường cho phép một miền đưa ra các yêu cầu đối với các miền khác, nhưng không truy cập vào các phản hồi.
Tuy nhiên, chính sách tạo ra nhiều hạn chế, nên có nhiều cách tiếp cận khác nhau đã được tạo ra để phá vỡ các hạn chế đó. Nhiều trang web tương tác với tên miền phụ hoặc website của bên thứ ba theo cách yêu cầu truy cập cross-origin. Việc nới lỏng chính sách same-origin có kiểm soát còn được thực hiện bằng cách bật CORS.
Giao thức Cross-Origin Resource Sharing sử dụng một bộ header HTTP xác định nguồn gốc web đáng tin cậy và các thuộc tính liên quan, chẳng hạn như quyền truy cập được xác thực có được phép hay không. Chúng được kết hợp trong trao đổi header giữa trình duyệt và cross-origin website mà trình duyệt đang cố truy cập.
CORS có cần thiết không?
Vì đây là một tính năng bảo mật nên chiến lược mặc định cho người dùng là chỉ bật CORS khi đã chắc chắn rằng nó cần thiết và chỉ áp dụng cho những vị trí thực sự cần.
Trước hết, không phải mọi cross-origin request đều yêu cầu CORS. Việc nhúng hình ảnh, tệp đa phương tiện, IFrame, stylesheet CSS hoặc thư viện JavaScript từ một miền khác không tuân theo chính sách same-origin. Chỉ các yêu cầu trực tiếp từ các tập lệnh, chẳng hạn như các lệnh gọi API thông qua lệnh fetch () hoặc giao diện XMLHttpRequest, web font và một số tính năng canvas và WebGL mới sử dụng CORS.
Việc kích hoạt CORS liên quan đến việc định cấu hình máy chủ để bao gồm các header phản hồi cụ thể trong các phản hồi HTTP được gửi lại trình duyệt. Các header này chỉ rõ nguồn gốc nào được phép truy cập tài nguyên từ máy chủ.
Bằng cách cho phép các cross-origin request, các ứng dụng web có thể sử dụng các phương thức HTTP khác nhau (GET, POST, PUT, DELETE) và chia sẻ các tài nguyên như font chữ, hình ảnh, stylesheet hoặc thậm chí dữ liệu (thông qua JSON, XML) với các domain khác.
CORS rất quan trọng đối với các ứng dụng web hiện đại – phụ thuộc nhiều vào API, microservice hoặc tài nguyên bên ngoài. Nếu không có CORS, các trình duyệt sẽ chặn các yêu cầu như vậy và các ứng dụng này sẽ không thể hoạt động bình thường trên các miền khác nhau.
Tuy nhiên, điều quan trọng là phải bật CORS một cách thận trọng và thực hiện các biện pháp bảo mật thích hợp để ngăn chặn việc truy cập trái phép hoặc sử dụng tài nguyên quá đà. Việc định cấu hình tính năng này đúng cách liên quan đến chỉ định origin nào được phép, chỉ chấp các phương thức HTTP cần thiết và xác thực các yêu cầu về xác thực, ủy quyền và kiểm tra bảo mật.
Chi tiết cách bật CORS trên cPanel
Thông thường, có hai cách cơ bản để bạn có thể kích hoạt CORS cho website của mình:
Yêu cầu website host
Cách đơn giản và dễ dàng nhất để bật CORS là nói chuyện trực tiếp với website host của bạn. Trong trường hợp chưa quen với việc quản lý trang web, việc kích hoạt tính năng theo cách thủ công trên trang có thể khá khó khăn.
Do đó, tốt nhất bạn nên liên hệ với đại diện bộ phận hỗ trợ kỹ thuật chuyên nghiệp và yêu cầu kích hoạt CORS cho website.
Chỉnh sửa tệp .htaccess của website
Người dùng có thể bật CORS bằng cách cập nhật tệp .htaccess trong hosting. Sau khi login cPanel và truy cập File Manager để mở tệp .htaccess hoặc truy cập qua FTP, bạn trực tiếp thêm các dòng dưới đây vào tệp:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin “*”
</IfModule>
Hoặc nếu sử dụng mã nguồn PHP, bạn có thể thêm các dòng sau:
<?php
header(“Access-Control-Allow-Headers: Authorization, Content-Type”);
header(“Access-Control-Allow-Origin: *”);
header(‘content-type: application/json; charset=utf-8’);
?>
Tệp .htaccess về cơ bản định cấu hình các subfolder và subdirectory của website. Nói chung, máy chủ lưu trữ web sẽ có thể cung cấp tài liệu về cách bật CORS qua tệp .htaccess. Do đó, bạn nên tham khảo bên website host trước khi tự mình thực hiện bất kỳ thay đổi nào.
Như vậy, việc bật CORS trên cPanel đã hoàn thành. Cần lưu ý rằng bạn nên tham khảo tư vấn từ website host trước khi thực hiện bất kỳ thay đổi nào trong hosting nhằm tránh các rủi ro không lường trước. Nếu bạn có bất kỳ câu hỏi hoặc gặp sự cố trong quá trình thực hiện, hãy nhanh chóng kết nối với nhóm hỗ trợ của HVN – Hệ sinh thái kiến tạo doanh nghiệp 4.0 – thông qua Hotline 024 9999 7777 để được hỗ trợ giải quyết trong thời gian nhanh nhất có thể.