¿El enlace con target = "_ blank" y rel = "noopener noreferrer" sigue siendo vulnerable?

95

Veo gente recomendando que cada vez que uno use target="_blank"un enlace para abrirlo en una ventana diferente, deberían poner rel="noopener noreferrer". Me pregunto cómo me impide esto usar Herramientas de desarrollo en Chrome, por ejemplo, y eliminar el atributo rel. Luego haciendo clic en el enlace ...

¿Es esa una manera fácil de mantener la vulnerabilidad?

Miro J.
fuente
¿Qué tipo de protección cree que otorgaría (o no otorgaría, en este caso)?
Estaba considerando extensiones de navegador que pueden manipular el DOM.
Miro J.
1
Firefox 79 hará esto automáticamente (bueno, noopeneral menos, pero como se señala a continuación, noreferreres redundante): hacks.mozilla.org/2020/07/firefox-79
Kev

Respuestas:

114

Puede estar malinterpretando la vulnerabilidad. Puede leer más sobre esto aquí: https://www.jitbit.com/alexblog/256-targetblank---the-most-underestimated-vulnerability-ever/

Esencialmente, agregar rel="noopener noreferrer"enlaces protege a los usuarios de su sitio contra que el sitio al que ha vinculado pueda secuestrar el navegador (a través de JS fraudulento).

Está preguntando sobre la eliminación de ese atributo a través de las herramientas de desarrollo, lo que solo lo expondría potencialmente a usted (la persona que manipula el atributo) a la vulnerabilidad.

Jon Uleis
fuente
8
noopener noreferreres redundante, ya que noreferrerincluye la funcionalidad de noopener. html.spec.whatwg.org/multipage/links.html#link-type-noreferrer
mfluehr
1
si es redundante, ¿por qué Visual Studio Code requiere ambos?
muhe
57

Los enlaces con target="_blank"ellos son vulnerables a que la página de referencia se cambie en segundo plano mientras que la pestaña recién abierta desvía la atención del usuario. Esto se conoce como tabnapping inverso :

Ejemplo de flujo malicioso

La página de referencia está almacenada window.openery un sitio malicioso podría modificar esto mediante:

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

La adición rel="noopener noreferrer"corrige esta vulnerabilidad en todos los principales navegadores.

Tenga en cuenta que, en teoría, podría eliminar el rel lado del cliente mediante la manipulación ... pero ¿por qué querría hacerlo? Todo lo que está haciendo es deliberadamente hacerse vulnerable al ataque.

Otros usuarios que visiten el mismo sitio web (y no modifiquen su propio código del lado del cliente) aún estarían seguros, ya que el servidor aún serviría el rel="noopener noreferrer". Su eliminación solo se aplica a usted.

Edad de obsidiana
fuente
3

La etiqueta de anclaje rel=”noopener”o los rel=”noreferrer”atributos mejoran la seguridad del sitio web, pero algunas personas quieren ignorarlos porque piensan que afectarán la optimización del motor de búsqueda de su sitio web, pero eso es solo un mito. Protege la confidencialidad de la audiencia de su sitio web y evita que un sitio web externo propague código malicioso.

Kowsigan Atsayam
fuente
5
Sería bueno si pudiera citar alguna fuente para la declaración de "mito". Especialmente, por el noreferrerpapel.
Miro J.
0

Si la consola del desarrollador muestra una advertencia al respecto noopener noreferrer, asegúrese de agregar ambos noopenery noreferreren rel. El enlace debería ser algo como el siguiente:

<a href="www.google.com" target="_blank" rel="noopener noreferrer" />
Yuvraj Patil
fuente