Referrer Policy là gì? Hướng dẫn toàn diện từ A đến Z về chính sách giới thiệu trong bảo mật web

referrer policy là gì

Referrer Policy là một cơ chế bảo mật quan trọng trên web, cho phép website kiểm soát thông tin nào được gửi trong header HTTP Referer khi người dùng điều hướng từ trang này sang trang khác. Nói một cách đơn giản, referrer policy là gì – đó là tập hợp các quy tắc quyết định mức độ chi tiết của dữ liệu nguồn gốc (origin) hoặc URL đầy đủ mà trình duyệt sẽ chia sẻ với website đích. Hiểu và cấu hình đúng chính sách referrer giúp bảo vệ quyền riêng tư người dùng, ngăn chặn rò rỉ thông tin nhạy cảm qua đường dẫn URL và vẫn đảm bảo các chức năng phân tích hợp pháp hoạt động bình thường.

Bản chất của Referrer Policy và cách nó hoạt động

referrer policy là gì - Hình 5

Khi bạn click vào một liên kết từ trang A đến trang B, trình duyệt sẽ gửi một header HTTP có tên Referer (viết sai chính tả nhưng đã trở thành chuẩn) để thông báo cho máy chủ đích biết trang nào đã giới thiệu người dùng. Thông tin này có thể bao gồm URL đầy đủ (gồm đường dẫn, tham số truy vấn) hoặc chỉ tên miền gốc, tùy vào chính sách được áp dụng.

Referrer Policy ra đời để giải quyết các rủi ro bảo mật: nếu URL trang nguồn chứa token, session ID, mật khẩu tạm thời hoặc dữ liệu nhạy cảm khác, việc gửi toàn bộ URL này cho bên thứ ba có thể dẫn đến lộ lọt thông tin. Chính sách referrer cho phép lập trình viên và quản trị viên website tùy chỉnh mức độ thông tin được tiết lộ.

Phân loại các giá trị của Referrer Policy

referrer policy là gì - Hình 4

Hiện tại có 8 giá trị chính được định nghĩa trong chuẩn HTML và W3C. Mỗi giá trị quy định một cơ chế kiểm soát khác nhau:

Giá trị Mô tả Mức độ bảo mật
no-referrer Không gửi thông tin referrer trong bất kỳ trường hợp nào. Cao nhất
no-referrer-when-downgrade Chỉ gửi referrer khi kết nối đích là HTTPS và nguồn cũng là HTTPS. Nếu đích là HTTP hoặc kém bảo mật hơn, không gửi. Cao
origin Chỉ gửi origin (schema + host + port) mà không có đường dẫn hay query string. Trung bình
origin-when-cross-origin Gửi URL đầy đủ cho yêu cầu cùng origin, chỉ gửi origin cho yêu cầu cross-origin. Trung bình – Cao
same-origin Chỉ gửi referrer khi yêu cầu cùng origin. Với cross-origin, hoàn toàn không gửi. Cao
strict-origin Gửi origin cho request từ HTTPS đến HTTPS, không gửi gì nếu request đến HTTP. Cao
strict-origin-when-cross-origin Mặc định trên Chrome và nhiều trình duyệt. Gửi URL đầy đủ cho cùng origin, gửi origin cho cross-origin (cả hai đều HTTPS), không gửi gì khi hạ cấp bảo mật. Cao & Linh hoạt
unsafe-url Luôn gửi URL đầy đủ (bao gồm cả query string) bất kể nguồn và đích. Thấp nhất

Cách thiết lập Referrer Policy trên website

Có ba phương pháp chính để cấu hình chính sách referrer cho website của bạn:

    • Meta tag trong HTML: Chèn thẻ <meta name="referrer" content="strict-origin-when-cross-origin"> vào phần <head>. Phương pháp này ảnh hưởng đến mọi liên kết, hình ảnh, script, iframe trên trang.
    • HTTP header từ máy chủ: Thêm header Referrer-Policy: strict-origin-when-cross-origin trong phản hồi HTTP. Đây là cách ưu tiên cao nhất và bao phủ tất cả tài nguyên từ domain đó.
    • Thuộc tính HTML trên từng thẻ: Dùng referrerpolicy trong thẻ <a>, <img>, <link>, <script> hoặc <iframe> để ghi đè chính sách toàn cục cho một liên kết cụ thể.

    Ví dụ: <a href="https://example.com" referrerpolicy="no-referrer">Liên kết an toàn</a>

    Lợi ích và hạn chế khi sử dụng Referrer Policy

    referrer policy là gì - Hình 3

    Lợi ích nổi bật

    • Bảo vệ quyền riêng tư người dùng: Ngăn chặn việc tiết lộ thông tin nhạy cảm như session ID, token xác thực, dữ liệu tìm kiếm cá nhân có trong URL.
    • Ngăn chặn rò rỉ dữ liệu qua cross-origin: Khi website nhúng tài nguyên từ CDN hoặc gửi dữ liệu phân tích, referrer policy hạn chế thông tin gốc bị lộ cho bên thứ ba.
    • Tuân thủ quy định bảo mật: GDPR, CCPA và các luật riêng tư khác yêu cầu kiểm soát thông tin người dùng. Referrer policy là một công cụ đơn giản để giảm thiểu rủi ro.
    • Giảm tấn công CSRF và clickjacking thông qua referrer: Một số tấn công lợi dụng header Referer để giả mạo nguồn gốc; chính sách chặt chẽ có thể ngăn chặn phần nào.
    • Dễ triển khai: Không yêu cầu thay đổi backend phức tạp, chỉ việc thêm một dòng meta hoặc header.

    Hạn chế cần lưu ý

    • Ảnh hưởng đến phân tích truy cập: Nếu đặt no-referrer hoặc same-origin, các công cụ như Google Analytics có thể mất dữ liệu nguồn giới thiệu. Cân nhắc dùng strict-origin-when-cross-origin để vẫn giữ origin cho các phân tích cơ bản.
    • Không phải là giải pháp bảo mật tuyệt đối: Referrer policy chỉ kiểm soát header Referer. Các vector khác như localStorage, cookie, fingerprint vẫn có thể rò rỉ thông tin.
    • Xung đột với chức năng xác thực: Một số dịch vụ OAuth hoặc payment gateway dựa vào header Referer để xác minh nguồn gửi. Thay đổi chính sách có thể làm hỏng flow xác thực.
    • Hỗ trợ trình duyệt khác nhau: Hầu hết trình duyệt hiện đại đều hỗ trợ, nhưng một số giá trị như strict-origin-when-cross-origin là mặc định từ Chrome 85+ nhưng có thể chưa được hỗ trợ trên các trình duyệt cũ.

    So sánh các giá trị Referrer Policy phổ biến

    com/reset-password?token=abc123). Nếu trang đó có liên kết ra ngoài (như link đến tài liệu hoặc hình ảnh CDN), header Referer mặc định sẽ gửi toàn bộ URL, bao gồm cả token. Bằng cách đặt referrerpolicy="same-origin" hoặc sử dụng meta tag với strict-origin-when-cross-origin trên toàn bộ trang đăng nhập, bạn ngăn chặn rò rỉ token cho bên thứ ba.

    Tối ưu cho phân tích dữ liệu

    Google Analytics phụ thuộc vào header Referer để biết người dùng đến từ trang nào. Nếu bạn đặt no-referrer, dữ liệu “source/medium” trên GA sẽ bị mất. Giải pháp tốt nhất là sử dụng strict-origin-when-cross-origin – nó vẫn gửi origin (ví dụ: https://facebook.com) khi người dùng từ Facebook sang website của bạn, giữ nguyên dữ liệu giới thiệu nhưng che đi đường dẫn cụ thể.

    Kiểm soát referrer cho tài nguyên nhúng

    Khi nhúng iframe từ bên thứ ba hoặc tải script từ CDN, referrer policy trên thẻ iframe hoặc script giúp bạn quyết định CDN đó có biết URL đầy đủ của trang bạn hay không. Ví dụ: <img src="https://cdn.example.com/pixel.gif" referrerpolicy="no-referrer"> – pixel đó sẽ không nhận được thông tin trang nguồn.

    Bảo mật cho trang thanh toán

    Trang checkout thường có các liên kết đến cổng thanh toán như PayPal, Stripe – các cổng này thường kiểm tra header Referer để xác thực yêu cầu. Nếu bạn đặt chính sách quá chặt, thanh toán có thể thất bại. Do đó, trên các trang thanh toán, nên sử dụng referrerpolicy="origin-when-cross-origin" để gửi origin (không đường dẫn) cho cross-origin, vừa đảm bảo an toàn vừa không phá vỡ luồng thanh toán.

    Sai lầm thường gặp khi cấu hình Referrer Policy và cách tránh

    referrer policy là gì - Hình 2
    1. Đặt quá chặt chẽ, làm hỏng phân tích và chức năng
      Nhiều người chọn no-referrer để “an toàn tuyệt đối” nhưng vô tình phá vỡ toàn bộ hệ thống tracking, chức năng single sign-on, và thậm chí làm lỗi một số API. Giải pháp: dùng strict-origin-when-cross-origin – vừa bảo mật cao vừa linh hoạt.
    2. Không kiểm tra trên tất cả trình duyệt
      Mặc dù hầu hết trình duyệt hiện đại hỗ trợ, nhưng các phiên bản cũ (IE 11, Safari 12 trở xuống) có thể xử lý strict-origin-when-cross-origin không chính xác. Nên dùng polyfill hoặc cung cấp fallback trong code.
    3. Không kết hợp CSP với Referrer Policy
      Content Security Policy (CSP) và Referrer Policy là hai lớp bảo vệ khác nhau. Nếu bạn dùng CSP để chặn inline script nhưng lại không cấu hình referrer policy, vẫn có thể rò rỉ dữ liệu qua header Referer. Tốt hơn hãy dùng cả hai.
    4. Không kiểm tra đúng giá trị mặc định của trình duyệt
      Từ Chrome 85+, giá trị mặc định là strict-origin-when-cross-origin. Nhưng nếu website của bạn vẫn dùng no-referrer-when-downgrade (giá trị cũ), có thể gây xung đột. Thống nhất một giá trị duy nhất trên toàn bộ website.
    5. Không áp dụng cho tài nguyên hình ảnh, script, iframe
      Nhiều người chỉ cấu hình meta tag cho document nhưng quên cấu hình cho các tài nguyên cụ thể. Nếu có một ảnh từ CDN, nó vẫn có thể lấy URL đầy đủ nếu không có referrerpolicy riêng.

Lưu ý quan trọng khi triển khai Referrer Policy

Thứ tự ưu tiên: HTTP header có mức ưu tiên cao hơn meta tag. Thuộc tính HTML trên thẻ cụ thể có mức cao nhất. Nếu bạn vừa set header strict-origin-when-cross-origin vừa dùng meta no-referrer trong cùng một trang, header sẽ thắng.

Kiểm tra bằng DevTools: Trong Chrome, mở tab Network, click vào request bất kỳ và xem phần Request Headers. Nếu thấy Referer:... xuất hiện, hãy kiểm tra xem nó có phải URL đầy đủ hay chỉ origin. Để test nhanh, dùng website whatsmyreferer.com hoặc httpbin.org/headers.

Tương thích ngược: Trình duyệt không hỗ trợ một giá trị cụ thể sẽ bỏ qua và dùng giá trị mặc định. Vì vậy, hãy dùng các giá trị có trong danh sách W3C và kiểm tra hỗ trợ tại caniuse.com.

Kết hợp với CSP: Nếu bạn muốn kiểm soát cả việc gửi dữ liệu và chặn nội dung độc hại, hãy dùng CSP header kết hợp. Ví dụ: Content-Security-Policy: referrer strict-origin-when-cross-origin (một số phiên bản CSP hỗ trợ directive referrer).

Câu hỏi thường gặp về Referrer Policy (FAQ)

referrer policy là gì - Hình 1

Referrer Policy có ảnh hưởng đến SEO không?

Không trực tiếp, nhưng gián tiếp. Nếu bạn chặn hoàn toàn referrer, các công cụ tìm kiếm như Google có thể không biết được backlink từ trang nào dẫn đến bạn, ảnh hưởng đến việc ghi nhận liên kết. Tuy nhiên, Google thường dùng dữ liệu từ Search Console và crawl trực tiếp hơn là dựa vào header Referer. Với các giá trị như origin hoặc strict-origin-when-cross-origin, SEO phân tích vẫn hoạt động tốt.

Tôi nên chọn giá trị nào cho website WordPress?

Nếu bạn dùng plugin SEO và các dịch vụ phân tích, hãy thêm dòng sau vào file .htaccess hoặc cấu hình server: Header always set Referrer-Policy "strict-origin-when-cross-origin". Điều này giữ an toàn và tương thích với hầu hết các plugin.

Sự khác biệt giữa Referer và Referrer Policy là gì?

Referer là header thực tế được gửi trong request. Referrer Policy là tập hợp quy tắc quyết định header Referer có được gửi hay không và với nội dung gì. Hai khái niệm này liên quan chặt chẽ nhưng không đồng nhất.

Làm sao để kiểm tra Referrer Policy hiện tại trên trang của tôi?

Dùng Chrome DevTools: Mở tab Application/Storage, vào mục Frames, chọn document và xem phần Headers. Hoặc đơn giản hơn, dùng extension như “Referrer Control” hoặc gõ lệnh curl -I https://yourdomain.com | grep -i referrer.

Referrer Policy ảnh hưởng đến tất cả request hay chỉ request điều hướng?

Nó ảnh hưởng đến tất cả yêu cầu tài nguyên: hình ảnh, script, iframe, font, fetch, XMLHttpRequest, và cả link điều hướng. Bạn có thể tùy chỉnh riêng cho từng loại tài nguyên bằng cách dùng thuộc tính referrerpolicy trên thẻ đó.

Kết luận

Referrer Policy là một công cụ bảo mật mạnh mẽ nhưng thường bị bỏ qua trong các dự án web hiện nay. Hiểu rõ referrer policy là gì và cách cấu hình nó giúp bạn bảo vệ quyền riêng tư người dùng, giảm thiểu rủi ro rò rỉ dữ liệu nhạy cảm, đồng thời duy trì hiệu quả phân tích và chức năng xác thực. Không có một giá trị nào hoàn hảo cho mọi tình huống, nhưng strict-origin-when-cross-origin được khuyến nghị rộng rãi như một điểm cân bằng tốt nhất giữa bảo mật và tiện ích. Hãy bắt đầu bằng cách kiểm tra chính sách hiện tại của website bạn, sau đó triển khai dần dần, kết hợp với test kỹ trên các trình duyệt và thiết bị khác nhau để đảm bảo không làm hỏng bất kỳ chức năng nào.

Bài viết cùng chủ đề:

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *