Thuộc tính rel noopener trong WordPress là gì? Tìm hiểu tầm quan trọng và cách thêm vào để bảo mật tốt hơn

Khi xây dựng một trang web WordPress là gì, việc tạo ra các liên kết ngoài (external links) là điều không thể tránh khỏi. Chúng giúp tăng giá trị cho người đọc bằng cách cung cấp thêm tài liệu tham khảo, dẫn đến các nguồn uy tín hoặc các công cụ hữu ích. Tuy nhiên, bạn có biết rằng một liên kết ngoài đơn giản, nếu không được cấu hình đúng cách, có thể trở thành một cửa ngõ cho các rủi ro bảo mật tiềm ẩn không? Đây là một vấn đề mà nhiều người quản trị website thường bỏ qua. Một trong những lỗ hổng phổ biến nhất liên quan đến việc mở liên kết trong tab mới mà không có thuộc tính bảo vệ. Giải pháp cho vấn đề này chính là thuộc tính rel="noopener". Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu chi tiết về rel="noopener", vai trò của nó trong việc bảo vệ trang web WordPress của bạn, và cách triển khai nó một cách chính xác để đảm bảo an toàn tối đa cho cả bạn và người dùng.

Thuộc tính rel noopener trong WordPress là gì?

Để hiểu rõ cách bảo vệ trang web của mình, trước tiên chúng ta cần nắm vững khái niệm và cơ chế hoạt động của thuộc tính rel="noopener". Đây không phải là một khái niệm phức tạp, nhưng nó đóng một vai trò vô cùng quan trọng trong kiến trúc bảo mật của website hiện đại.

Định nghĩa rel noopener

Về mặt kỹ thuật, rel="noopener" là một thuộc tính HTML được thêm vào thẻ <a> (thẻ liên kết). Từ “rel” là viết tắt của “relationship” (mối quan hệ), dùng để chỉ định mối quan hệ giữa tài liệu hiện tại và tài liệu được liên kết đến. Khi bạn thêm rel="noopener", bạn đang ra lệnh cho trình duyệt rằng trang mới được mở ra sẽ không có quyền truy cập vào đối tượng window.opener của trang gốc.

Để dễ hình dung hơn, hãy tưởng tượng trang web của bạn là một ngôi nhà an toàn. Khi một người dùng nhấp vào một liên kết mở trong tab mới (thường có thuộc tính target="_blank"), họ giống như đang bước qua một cánh cửa để sang một ngôi nhà khác. Nếu không có rel="noopener", cánh cửa đó sẽ không được đóng lại hoàn toàn. Người ở ngôi nhà mới (trang web đích) có thể nhìn lại và thậm chí điều khiển một số thứ trong ngôi nhà của bạn thông qua đối tượng window.opener bằng JavaScript. Nhưng khi bạn thêm rel="noopener", nó giống như bạn đã đóng và khóa chặt cánh cửa đó lại. Trang mới sẽ hoạt động độc lập và không thể tác động ngược trở lại trang của bạn.

Trong WordPress, từ phiên bản 4.7.4 trở đi, thuộc tính này đã được tự động thêm vào tất cả các liên kết có target="_blank" để tăng cường bảo mật mặc định cho người dùng. Bạn có thể tham khảo thêm chi tiết về Cách sử dụng WordPress.

Hình minh họa

Chức năng chính của rel noopener

Chức năng cốt lõi của rel="noopener" là vô hiệu hóa thuộc tính window.opener trên trang mới được mở. window.opener là một đối tượng JavaScript cho phép một cửa sổ (tab mới) có quyền truy cập vào cửa sổ đã mở ra nó (tab gốc). Khi đối tượng này tồn tại, trang đích có thể thực thi các đoạn mã JavaScript để thao túng trang gốc.

Cụ thể, chức năng của rel="noopener" có thể được tóm gọn trong hai nhiệm vụ chính:

  1. Ngăn chặn trang con truy cập đối tượng window.opener: Đây là chức năng cơ bản và quan trọng nhất. Bằng cách đặt giá trị window.opener thành null, rel="noopener" đã cắt đứt hoàn toàn cầu nối giao tiếp giữa trang gốc và trang đích. Trang đích sẽ không biết trang nào đã mở ra nó và do đó không thể gửi bất kỳ lệnh điều khiển nào trở lại.
  2. Bảo vệ trang web khỏi các cuộc tấn công: Khi window.opener bị vô hiệu hóa, trang web của bạn sẽ được bảo vệ khỏi một loại tấn công nguy hiểm có tên là “reverse tabnabbing” (sẽ được đề cập chi tiết ở phần sau). Kẻ tấn công không thể sử dụng trang đích để chuyển hướng trang gốc của bạn đến một trang lừa đảo (phishing) hoặc thay đổi nội dung trang gốc (thay đổi DOM) để đánh lừa người dùng. Điều này giúp bảo vệ thông tin đăng nhập, dữ liệu cá nhân và uy tín thương hiệu của bạn.

Tóm lại, rel="noopener" là một lớp bảo vệ đơn giản nhưng cực kỳ hiệu quả, giúp đảm bảo rằng các liên kết ngoài trên trang web của bạn không vô tình trở thành điểm yếu bảo mật. Bạn có thể tìm hiểu thêm về Cài đặt plugin giúp hỗ trợ quản lý liên kết trong WordPress.

Tầm quan trọng của rel noopener trong bảo mật WordPress

Việc hiểu rõ các rủi ro tiềm ẩn sẽ giúp chúng ta nhận thức được tầm quan trọng của việc áp dụng các biện pháp bảo mật, dù là nhỏ nhất. Thuộc tính rel="noopener" không chỉ là một khuyến nghị kỹ thuật, mà nó là một yêu cầu thiết yếu để bảo vệ trang web WordPress trong bối cảnh các mối đe dọa an ninh mạng ngày càng tinh vi.

Các rủi ro bảo mật khi không sử dụng rel noopener

Khi bạn tạo một liên kết đến một trang web bên ngoài và thiết lập cho nó mở trong một tab mới (target="_blank") mà không kèm theo rel="noopener", bạn đã vô tình tạo ra một lỗ hổng bảo mật nghiêm trọng. Lỗ hổng này có thể bị khai thác thông qua một kỹ thuật tấn công gọi là reverse tabnabbing (tạm dịch: đánh cắp tab ngược).

Hãy xem xét một kịch bản tấn công thực tế:

  1. Người dùng truy cập trang của bạn: Một người dùng đang đọc bài viết trên blog của bạn và thấy một liên kết thú vị đến một trang web khác. Bạn đã đặt liên kết này mở trong tab mới để giữ chân người dùng.
  2. Nhấp vào liên kết: Người dùng nhấp vào liên kết. Một tab mới được mở ra để tải trang web đích. Trong khi đó, tab chứa trang web của bạn vẫn chạy ở chế độ nền.
  3. Khai thác lỗ hổng: Trang web đích, do kẻ xấu kiểm soát, chứa một đoạn mã JavaScript đơn giản. Đoạn mã này sử dụng đối tượng window.opener.location để thay đổi URL của tab gốc (trang web của bạn).
  4. Chuyển hướng đến trang lừa đảo: Trang web của bạn trong tab nền sẽ âm thầm bị chuyển hướng đến một trang đăng nhập giả mạo, được thiết kế giống hệt trang đăng nhập WordPress hoặc một trang mạng xã hội phổ biến.
  5. Người dùng bị lừa: Khi người dùng xem xong nội dung ở tab mới và quay trở lại tab của bạn, họ sẽ thấy một trang yêu cầu đăng nhập lại do “phiên làm việc đã hết hạn”. Không chút nghi ngờ, họ nhập tên người dùng và mật khẩu.
  6. Thông tin bị đánh cắp: Ngay khi họ nhấn nút “Đăng nhập”, thông tin nhạy cảm của họ đã bị gửi thẳng đến máy chủ của kẻ tấn công.

Hình minh họa

Đây là một hình thức tấn công lừa đảo (phishing) cực kỳ tinh vi vì nó xảy ra trên chính tên miền của bạn, khiến người dùng khó lòng phát hiện. Bằng cách thêm rel="noopener", bạn đã ngăn chặn hoàn toàn kịch bản này xảy ra. Trong quá trình thiết kế web, bạn cũng cần lưu ý Thiết kế web WordPress đúng cách để hạn chế các sự cố tương tự.

Ảnh hưởng đến hiệu suất và trải nghiệm người dùng

Ngoài vấn đề bảo mật, việc không sử dụng rel="noopener" còn có thể ảnh hưởng tiêu cực đến hiệu suất trang web và trải nghiệm người dùng. Trang mới được mở ra có thể chạy các đoạn mã JavaScript nặng, tốn nhiều tài nguyên xử lý.

Do tab mới và tab gốc chia sẻ cùng một tiến trình (process) trong một số trình duyệt, các đoạn mã JavaScript tiêu tốn nhiều CPU trên trang đích có thể làm cho trang web của bạn (đang chạy ở tab nền) trở nên chậm chạp, giật lag. Điều này tạo ra một trải nghiệm người dùng rất tệ, khiến họ cảm thấy trang web của bạn thiếu ổn định và không chuyên nghiệp.

Khi sử dụng rel="noopener", trình duyệt sẽ hiểu rằng hai tab này không liên quan đến nhau và có thể chạy chúng trên các tiến trình riêng biệt. Điều này giúp cô lập hiệu suất, đảm bảo rằng dù trang đích có hoạt động nặng nề đến đâu, nó cũng không làm ảnh hưởng đến tốc độ và sự mượt mà của trang web gốc. Do đó, rel="noopener" không chỉ là một công cụ bảo mật mà còn là một phương pháp tối ưu hóa hiệu suất, góp phần mang lại trải nghiệm tốt nhất cho người dùng.

Hướng dẫn sử dụng rel noopener trong WordPress

May mắn thay, việc triển khai rel="noopener" trong WordPress rất đơn giản. Kể từ phiên bản 4.7.4, WordPress đã tự động thực hiện việc này cho bạn đối với các liên kết được thiết lập mở trong tab mới. Tuy nhiên, việc hiểu cách thực hiện thủ công vẫn rất quan trọng để kiểm tra, khắc phục sự cố hoặc khi làm việc với các phiên bản cũ hơn. Bạn có thể học thêm từ Học WordPress bài bản để nâng cao kỹ năng quản trị website.

Cách thêm thuộc tính rel noopener vào liên kết ngoài thủ công

Dù bạn đang sử dụng trình soạn thảo Gutenberg hiện đại hay Classic Editor quen thuộc, việc thêm thuộc tính rel="noopener" chỉ mất vài giây.

1. Với trình soạn thảo Gutenberg (Block Editor):
Gutenberg đã làm cho quy trình này trở nên cực kỳ trực quan.

  • Bước 1: Viết một đoạn văn bản và chọn phần bạn muốn chèn liên kết.
  • Bước 2: Nhấp vào biểu tượng liên kết (hình mắt xích) trên thanh công cụ.
  • Bước 3: Dán URL của trang web đích vào ô.
  • Bước 4: Nhấp vào biểu tượng bánh răng (Tùy chọn) để mở cài đặt liên kết nâng cao.
  • Bước 5: Trong bảng cài đặt hiện ra, hãy tích vào ô “Mở trong thẻ mới” (Open in new tab).

Ngay khi bạn chọn “Mở trong thẻ mới”, WordPress sẽ tự động thêm rel="noopener noreferrer" vào mã HTML của liên kết. Bạn không cần phải làm thêm bất cứ điều gì. noreferrer là một thuộc tính bổ sung giúp tăng cường quyền riêng tư bằng cách không gửi thông tin trang giới thiệu đến trang đích.

Hình minh họa

2. Với trình soạn thảo Classic Editor:
Nếu bạn vẫn trung thành với Classic Editor, cách làm cũng tương tự.

  • Bước 1: Bôi đen đoạn văn bản cần chèn link và nhấp vào biểu tượng “Chèn/sửa đường dẫn”.
  • Bước 2: Trong cửa sổ pop-up, dán URL vào và nhấp vào biểu tượng bánh răng (Tùy chọn liên kết).
  • Bước 3: Tích vào ô “Mở liên kết trong một thẻ mới”. Tương tự như Gutenberg, WordPress sẽ tự động thêm các thuộc tính cần thiết.

Để kiểm tra hoặc thêm thủ công, bạn có thể chuyển sang tab “Văn bản” (Text) để xem mã HTML. Bạn sẽ thấy liên kết có dạng: <a href="https://example.com" target="_blank" rel="noopener noreferrer">Đây là liên kết</a>. Nếu vì lý do nào đó mà thuộc tính rel="noopener" không có ở đó, bạn có thể tự mình gõ trực tiếp vào trong thẻ <a> như ví dụ trên.

Sử dụng plugin để tự động thêm rel noopener cho liên kết ngoài

Trong hầu hết các trường hợp, phiên bản WordPress hiện đại đã xử lý tốt việc này. Tuy nhiên, nếu bạn đang quản lý một trang web cũ, hoặc muốn có nhiều quyền kiểm soát hơn đối với tất cả các liên kết ngoài, việc sử dụng plugin là một giải pháp hiệu quả. Plugin có thể giúp bạn tự động quét toàn bộ trang web và thêm rel="noopener" vào tất cả các liên kết ngoài thiếu thuộc tính này, kể cả những liên kết đã được tạo từ lâu.

Một số plugin phổ biến có chức năng này bao gồm:

  • External Links – nofollow, noopener & new window: Đây là một plugin rất mạnh mẽ, cho phép bạn quản lý tất cả các liên kết ngoài một cách tập trung. Bạn có thể thiết lập để tự động thêm rel="noopener", rel="noreferrer", rel="nofollow", và mở tất cả các liên kết ngoài trong một tab mới.
  • WP External Links: Tương tự, plugin này cung cấp một giao diện quản lý toàn diện cho các liên kết ra khỏi trang web của bạn.

Để sử dụng, bạn chỉ cần thực hiện các bước sau:

  1. Cài đặt và kích hoạt plugin: Vào “Gói mở rộng” > “Cài mới” và tìm kiếm tên plugin bạn muốn.
  2. Cấu hình: Truy cập vào trang cài đặt của plugin (thường nằm trong menu “Cài đặt”).
  3. Thiết lập thuộc tính: Tìm đến mục cài đặt liên quan đến rel attributes và đảm bảo rằng tùy chọn thêm noopener được bật.

Sử dụng plugin giúp bạn tiết kiệm thời gian và đảm bảo tính nhất quán trên toàn bộ trang web, đặc biệt là với các trang web có hàng nghìn bài viết và liên kết. Tìm hiểu thêm về plugin tại Plugin popup WordPress để tăng tương tác hiệu quả.

Hình minh họa

Những vấn đề thường gặp khi dùng rel noopener

Mặc dù rel="noopener" là một thuộc tính đơn giản và được hỗ trợ rộng rãi, đôi khi bạn vẫn có thể gặp phải một số vấn đề trong quá trình sử dụng. Hiểu rõ nguyên nhân và cách khắc phục sẽ giúp bạn xử lý tình huống một cách nhanh chóng và hiệu quả.

Liên kết không mở đúng cách hoặc không kích hoạt rel noopener

Một trong những vấn đề phổ biến nhất là liên kết không hoạt động như mong đợi sau khi bạn đã thêm thuộc tính. Nguyên nhân có thể đến từ nhiều yếu tố khác nhau.

  • Lỗi cú pháp HTML: Đây là nguyên nhân hàng đầu. Một lỗi nhỏ như thiếu dấu ngoặc kép, gõ sai tên thuộc tính (ví dụ: rel="no-opener") hoặc đặt thuộc tính ở sai vị trí có thể khiến trình duyệt bỏ qua nó.
    Cách khắc phục: Luôn kiểm tra kỹ mã HTML của bạn. Chuyển sang trình soạn thảo văn bản (Text/HTML editor) để xem mã nguồn. Đảm bảo cú pháp chính xác là <a href="..." target="_blank" rel="noopener">...</a>.
  • Can thiệp từ JavaScript: Một số đoạn mã JavaScript tùy chỉnh hoặc từ plugin có thể can thiệp vào hành vi mặc định của liên kết. Ví dụ, một script có thể được viết để chặn việc mở tab mới hoặc thay đổi các thuộc tính của thẻ <a> sau khi trang tải xong.
    Cách khắc phục: Tạm thời vô hiệu hóa các plugin gần đây hoặc các script tùy chỉnh để xem vấn đề có được giải quyết không. Sử dụng công cụ “Inspect Element” (Kiểm tra phần tử) của trình duyệt để xem mã HTML cuối cùng của liên kết sau khi tất cả các script đã chạy.
  • Trình duyệt quá cũ: Mặc dù rel="noopener" được hỗ trợ bởi hầu hết các trình duyệt hiện đại, các phiên bản trình duyệt rất cũ có thể không nhận diện được thuộc tính này. Tuy nhiên, đây là trường hợp rất hiếm gặp trong thực tế ngày nay.
    Cách khắc phục: Đây không thực sự là lỗi từ phía bạn. Hãy đảm bảo rằng đối tượng người dùng của bạn đang sử dụng các trình duyệt được cập nhật.

Hình minh họa

xung đột với các plugin hoặc theme khác

Xung đột giữa các thành phần trong WordPress là một vấn đề cố hữu. Thuộc tính rel="noopener" cũng không phải là ngoại lệ.

  • Plugin quản lý liên kết: Các plugin chuyên về quản lý liên kết, đặc biệt là các plugin rút gọn link hoặc theo dõi affiliate, thường có cơ chế riêng để xử lý các liên kết ngoài. Chúng có thể ghi đè lên các thiết lập mặc định của WordPress hoặc của bạn.
    Hướng xử lý: Kiểm tra kỹ trang cài đặt của plugin đó. Hầu hết các plugin chất lượng đều cung cấp tùy chọn cho phép bạn cấu hình các thuộc tính rel như noopener, nofollow. Hãy đảm bảo rằng cài đặt trong plugin không xung đột với mục đích của bạn.
  • Theme có chức năng tùy chỉnh: Một số theme được tích hợp sẵn các tính năng tối ưu hóa hoặc bảo mật, và chúng có thể có logic riêng để xử lý các liên kết.
    Hướng xử lý: Tham khảo tài liệu của theme hoặc liên hệ với nhà phát triển theme để hỏi về cách theme xử lý các thuộc tính liên kết. Tìm xem có tùy chọn nào trong phần Theme Options (Tùy biến theme) cho phép bạn kiểm soát hành vi này không. Tham khảo chi tiết về Theme WordPress để hiểu rõ hơn.
  • Plugin bảo mật: Một số plugin bảo mật có thể thêm các quy tắc để thay đổi cách các liên kết được hiển thị hoặc hoạt động.
    Hướng xử lý: Tương tự như các plugin khác, hãy kiểm tra phần cài đặt của plugin bảo mật để xem có tùy chọn nào liên quan đến việc xử lý liên kết ngoài hay không.

Cách tiếp cận chung để xử lý xung đột là thực hiện quy trình loại trừ: vô hiệu hóa từng plugin một (bắt đầu với những plugin có khả năng can thiệp cao nhất) và chuyển sang một theme mặc định của WordPress (như Twenty Twenty-Four) để xem vấn đề có còn tồn tại hay không. Điều này sẽ giúp bạn xác định chính xác nguồn gốc của xung đột.

Hình minh họa

Best Practices cho việc sử dụng rel noopener

Để đảm bảo trang web của bạn không chỉ an toàn mà còn được tối ưu hóa tốt, việc tuân thủ các thực hành tốt nhất (best practices) khi làm việc với các liên kết ngoài là vô cùng quan trọng. Dưới đây là những nguyên tắc bạn nên áp dụng.

  • Luôn sử dụng rel=”noopener” khi mở liên kết ngoài với target=”_blank”:
    Đây là quy tắc vàng. Bất cứ khi nào bạn quyết định mở một liên kết trong tab mới, hãy coi việc thêm rel="noopener" là bắt buộc. Điều này đã trở thành một tiêu chuẩn bảo mật web và là cách phòng thủ đầu tiên và hiệu quả nhất chống lại tấn công reverse tabnabbing. Hãy biến nó thành một thói quen không cần suy nghĩ. May mắn là WordPress đã tự động hóa việc này, nhưng việc kiểm tra lại không bao giờ là thừa.
  • Kết hợp thêm rel=”noreferrer” để tăng cường bảo mật nếu cần:
    Thuộc tính rel="noreferrer" có một chức năng khác: nó ngăn trình duyệt gửi thông tin về trang giới thiệu (referrer) đến trang web đích. Điều này có hai lợi ích:
    1. Quyền riêng tư: Trang web đích sẽ không biết người dùng đến từ trang web của bạn.
    2. Bảo mật: Nó cũng có tác dụng tương tự như noopener trong việc ngăn chặn truy cập vào window.opener.

    WordPress thường tự động thêm cả hai thuộc tính (rel="noopener noreferrer"). Việc sử dụng cả hai là một thực hành tốt, vừa bảo mật vừa đảm bảo quyền riêng tư. Tuy nhiên, lưu ý rằng nếu bạn đang chạy các chương trình affiliate marketing dựa trên việc theo dõi referrer, bạn có thể cần phải xem xét lại việc sử dụng noreferrer cho các liên kết đó.

  • Tránh tự thêm thuộc tính sai cú pháp gây lỗi trang:
    Khi chỉnh sửa HTML thủ công, sai sót là điều khó tránh. Một lỗi cú pháp nhỏ trong thẻ <a> có thể làm hỏng không chỉ liên kết đó mà còn cả bố cục của trang. Hãy chắc chắn rằng bạn đặt các thuộc tính bên trong thẻ <a> và tuân thủ đúng định dạng: tên_thuộc_tính="giá_trị".
    • Đúng: <a href="https://example.com" target="_blank" rel="noopener noreferrer">
    • Sai: <a href="https://example.com" target="_blank" rel "noopener"> (thiếu dấu =)
    • Sai: <a href="https://example.com" target="_blank"> rel="noopener"</a> (thuộc tính nằm ngoài thẻ)
  • Kiểm tra và cập nhật thường xuyên các liên kết ngoài trên website:
    Quản lý website là một quá trình liên tục. Hãy lên lịch kiểm tra định kỳ (ví dụ: hàng quý) toàn bộ các liên kết ngoài trên trang web của bạn. Sử dụng các công cụ như Ahrefs, SEMrush hoặc các plugin kiểm tra liên kết gãy (Broken Link Checker) để quét trang web. Trong quá trình kiểm tra, hãy chú ý không chỉ đến các liên kết gãy mà còn đảm bảo rằng tất cả các liên kết mở trong tab mới đều có thuộc tính rel="noopener". Điều này đặc biệt quan trọng nếu trang web của bạn có nhiều tác giả hoặc đã hoạt động trong một thời gian dài.

Hình minh họa

Hình minh họa

Hình minh họa

Kết luận

Qua bài viết này, chúng ta đã cùng nhau khám phá một thuộc tính HTML tưởng chừng nhỏ bé nhưng lại có vai trò vô cùng to lớn trong việc bảo vệ trang web WordPress: rel="noopener". Nó không chỉ là một dòng mã kỹ thuật, mà là một lá chắn vững chắc giúp ngăn chặn các cuộc tấn công lừa đảo tinh vi như reverse tabnabbing, bảo vệ cả bạn và người dùng khỏi những rủi ro bảo mật tiềm ẩn. Hơn thế nữa, việc sử dụng rel="noopener" còn góp phần cải thiện hiệu suất trang, đảm bảo trải nghiệm người dùng luôn mượt mà và ổn định.

May mắn là với các phiên bản WordPress hiện đại, thuộc tính này đã được tích hợp mặc định cho các liên kết mở trong tab mới, giúp giảm bớt gánh nặng cho người quản trị web. Tuy nhiên, việc trang bị kiến thức để hiểu, kiểm tra và tùy chỉnh khi cần thiết vẫn là một kỹ năng quan trọng.

Do đó, hãy bắt đầu hành động ngay hôm nay. Hãy dành chút thời gian để kiểm tra lại các liên kết trên trang web của bạn. Dù là thực hiện thủ công hay sử dụng plugin, việc đảm bảo mọi liên kết ngoài đều được trang bị rel="noopener" là một bước đầu tư nhỏ nhưng mang lại giá trị bảo mật lâu dài. Bảo vệ trang web của bạn chính là bảo vệ uy tín và sự tin tưởng mà người dùng đã dành cho bạn.

Đánh giá
Tác giả

Mạnh Đức

Có cao nhân từng nói rằng: "Kiến thức trên thế giới này đầy rẫy trên internet. Tôi chỉ là người lao công cần mẫn đem nó tới cho người cần mà thôi !"

Chia sẻ
Bài viết liên quan