target=_blank , rel=noopener là đứa nào ?
target=_blank

đi vờ lớp ơ
thì target=_blank quá là quen thuộc đúng không nào? Nó chính là một thuộc tính của thẻ <a>
, một thẻ chuyên được dùng để tạo links trong các trang web và các bài viết. target=_blank được dùng khi các đi vờ lớp
muốn chuyển hướng người sử dụng sang một liên kết khác nhưng được mở ở trong tab mớiVí dụ hãy click vào link dưới đây các cậu sẽ được chuyển sang trang Google nhưng dưới một tab mới Download
vậy còn rel=noopener hay còn gọi là rel=noreferrer
Đây cũng là những thuộc tính đi kèm của thẻ<a>
nhưng lại vô cùng quan trọng và không được phép tách khỏi thẻ <a>
nếu như thẻ <a>
của chúng ta được gán thêm thuộc tính target=_blank
Vây thì tại sao target=_blank lại phải đi kèm với rel=noopener
Khi click vào đường link ở phía trên. Một tab mới được sinh và và đồng thờiwindow.opener
sẽ được sinh ra để trả về thông tin của trang đã tạo ra tab mới đó. Và trang đã tạo ra cái tab mới đó còn ai ngoài trang có chứa thẻ a
và mang thuộc tính target=_blank
của tớ. Và ngay lúc này, trang mới được sinh ra này sẽ có quyền kiểm soát cửa sổ của opener
, chính là trang của tớ. Và điều này có thể nguy hiểm nếu ...chuyện tình giữa target=_blank và rel=noopener
Hãy lấy một ví dụ tớ có một trang chính có tên làindex.html
và trang này chứa đoạn code mở trang client.html
trong cửa sổ mới và tất nhiên trang client.html
này có chứa đoạn mã mang í đồ không tốt. Lợi dụng việc có thể nắm quyền kiểm soát đối tượng window của index.html
khi index.html
mở nó trong tab mới.Tất nhiên nếu hai link đến từ hai nguồn khác nhau thì client.html chỉ có quyền trên đối tượng window mà không có quyền trên đối tượng document . Và tất nhiên như thế là đủ để gây nguy hại cho người sử dụng. Và trên cơ sở bài viết này, chúng ta sẽ chỉ tìm hiểu với những liên kết khác nhau về nguồn gốc. Tức là trang client.html có nguồn từ abc.com nhưng client.html lại có nguồn từ def.com
window
của trang client.html
nên nó có thể chuyển trang index.html
thành một trang khác và đó sẽ là một mối nguy hiểm cho người sử dụng nếu trang được chuyển tới là trang web độc hại với người sử dụng. Và nguy hiểm hơn cho những forum nếu thành viên đăng đàn có sử dụng thẻ liên kết a dạng này.rel=noopener
đã ra đời. Khi có thuộc tính này, thì cho dù trang client.html
được trang index.html
mở nhưng sẽ bị từ chối quyền kiểm soát với index.html
, rel=noreferrer
cũng tương đương như vậy.Do đó để tránh những cuộc tấn công dạng này, hãy đảm bảo rằng
- Tốt nhất là bỏ toàn bộ thuộc tính
target=_blank
- Nếu không hãy thêm thuộc tính
rel='noreferrer noopener'
vào bất kì thẻ a nào tồn tạitarget=_blank
- Sử dụng javascript để ngăn chặn sự kiện
window.open()
target=_blank và rel=noopener là một cặp tình nhân không được phép tách rời. Khi họ mất đi tình yêu của mình, họ có thể biến thành quỹ dữ với châm ngôn vì em anh có thể phụ tất cả.Mã nguồn
<script type="text/javascript">
if (window.opener) {
opener.location = 'virus.html';
}
</script>
Code Vô Đối bản quyền bài viết của Code Vô Đối nhé thằng ăn cắp. https://codevodoi.blogspot.com Đit_cu_may !