Liên kết với target = “_ blank” và rel = “noopener noreferrer” vẫn dễ bị tấn công?


97

Tôi thấy mọi người khuyên rằng bất cứ khi nào một người sử dụng target="_blank"liên kết để mở nó trong một cửa sổ khác, họ nên đặt rel="noopener noreferrer". Tôi tự hỏi làm thế nào mà điều này lại ngăn tôi sử dụng Công cụ dành cho nhà phát triển trong Chrome, và xóa thuộc tính rel. Sau đó nhấp vào liên kết ...

Đó có phải là một cách dễ dàng để vẫn giữ được lỗ hổng?


Bạn nghĩ nó sẽ cấp (hoặc không, trong trường hợp này) loại bảo vệ nào?

Tôi đang xem xét các tiện ích mở rộng của trình duyệt có thể thao túng DOM.
Miro J.

1
Firefox 79 sẽ làm việc này tự động (tốt, noopenerít nhất, nhưng khi ra nhọn bên dưới, noreferrerlà rendundant): hacks.mozilla.org/2020/07/firefox-79
Kev

Câu trả lời:


117

Bạn có thể đang hiểu sai về lỗ hổng. Bạn có thể đọc thêm về nó tại đây: https://www.jitbit.com/alexblog/256-targetblank---the-most-underesosystem-vulnerability-ever/

Về cơ bản, thêm rel="noopener noreferrer"vào liên kết bảo vệ người dùng trang web của bạn khỏi việc trang web bạn đã liên kết có khả năng chiếm quyền điều khiển trình duyệt (thông qua JS giả mạo).

Bạn đang hỏi về cách xóa thuộc tính đó qua Công cụ dành cho nhà phát triển - điều đó chỉ có khả năng khiến bạn (người giả mạo thuộc tính) bị lỗ hổng bảo mật.


8
noopener noreferrerlà dư thừa, vì noreferrerbao gồm chức năng của noopener. html.spec.whatwg.org/multipage/links.html#link-type-noreferrer
mfluehr

1
nếu nó dư thừa tại sao Visual Studio Code yêu cầu cả hai?
muhe

57

Các liên kết có target="_blank"trên chúng dễ bị hoán đổi khi trang liên kết giới thiệu bị hoán đổi trong nền trong khi sự chú ý của người dùng bị chuyển hướng bởi tab mới mở. Điều này được gọi là tabnapping ngược :

Ví dụ về luồng độc hại

Trang giới thiệu được lưu trữ trong window.openervà một trang web độc hại có thể sửa đổi điều này thông qua:

if (window.opener) {
   window.opener.location = "https://phish.example.com";
}

Thêm các rel="noopener noreferrer"bản sửa lỗi này trong tất cả các trình duyệt chính.

Lưu ý rằng về mặt lý thuyết bạn có thể xóa phía rel máy khách thông qua thao tác ... nhưng tại sao bạn lại muốn? Tất cả những gì bạn đang làm là cố tình khiến bản thân dễ bị tấn công.

Những người dùng khác truy cập vào cùng một trang web (và không sửa đổi mã phía máy khách của chính họ) sẽ vẫn an toàn, vì máy chủ sẽ vẫn phục vụ rel="noopener noreferrer". Việc bạn loại bỏ nó chỉ áp dụng cho bạn.


3

Thẻ neo rel=”noopener”hoặc rel=”noreferrer”các thuộc tính cải thiện bảo mật trang web, nhưng một số người muốn bỏ qua chúng vì họ nghĩ rằng chúng sẽ ảnh hưởng đến việc tối ưu hóa công cụ tìm kiếm trang web của họ, nhưng đó chỉ là một huyền thoại. Nó bảo vệ tính bí mật của đối tượng trang web của bạn và ngăn chặn trang web bên ngoài lây lan mã độc hại.


5
Sẽ rất tuyệt nếu bạn có thể trích dẫn một số nguồn cho tuyên bố "huyền thoại". Đặc biệt, về noreferrerphần.
Miro J.

0

Nếu bảng điều khiển dành cho nhà phát triển đang hiển thị cảnh báo liên quan đến noopener noreferrer, hãy đảm bảo bạn thêm cả hai noopenernoreferrertrong rel. liên kết sẽ giống như dưới đây:

<a href="www.google.com" target="_blank" rel="noopener noreferrer" />
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.