fix(frontend): add missing rel="noopener noreferrer" to target="_blank" links (#1741)

* fix(frontend): add missing rel="noopener noreferrer" to target="_blank" links

Prevent tabnabbing attacks and referrer leakage by ensuring all
external links with target="_blank" include both noopener and
noreferrer in the rel attribute.

Made-with: Cursor

* style: fix code formatting
This commit is contained in:
yangzheli
2026-04-02 17:32:52 +08:00
committed by GitHub
parent f56d0b4869
commit 636053fb6d
8 changed files with 33 additions and 14 deletions
@@ -253,7 +253,7 @@ export const OpenInChatGPT = (props: OpenInChatGPTProps) => {
<a
className="flex items-center gap-2"
href={providers.chatgpt.createUrl(query)}
rel="noopener"
rel="noopener noreferrer"
target="_blank"
>
<span className="shrink-0">{providers.chatgpt.icon}</span>
@@ -273,7 +273,7 @@ export const OpenInClaude = (props: OpenInClaudeProps) => {
<a
className="flex items-center gap-2"
href={providers.claude.createUrl(query)}
rel="noopener"
rel="noopener noreferrer"
target="_blank"
>
<span className="shrink-0">{providers.claude.icon}</span>
@@ -293,7 +293,7 @@ export const OpenInT3 = (props: OpenInT3Props) => {
<a
className="flex items-center gap-2"
href={providers.t3.createUrl(query)}
rel="noopener"
rel="noopener noreferrer"
target="_blank"
>
<span className="shrink-0">{providers.t3.icon}</span>
@@ -313,7 +313,7 @@ export const OpenInScira = (props: OpenInSciraProps) => {
<a
className="flex items-center gap-2"
href={providers.scira.createUrl(query)}
rel="noopener"
rel="noopener noreferrer"
target="_blank"
>
<span className="shrink-0">{providers.scira.icon}</span>
@@ -333,7 +333,7 @@ export const OpenInv0 = (props: OpenInv0Props) => {
<a
className="flex items-center gap-2"
href={providers.v0.createUrl(query)}
rel="noopener"
rel="noopener noreferrer"
target="_blank"
>
<span className="shrink-0">{providers.v0.icon}</span>
@@ -353,7 +353,7 @@ export const OpenInCursor = (props: OpenInCursorProps) => {
<a
className="flex items-center gap-2"
href={providers.cursor.createUrl(query)}
rel="noopener"
rel="noopener noreferrer"
target="_blank"
>
<span className="shrink-0">{providers.cursor.icon}</span>
@@ -63,7 +63,7 @@ export const Source = ({ href, title, children, ...props }: SourceProps) => (
<a
className="flex items-center gap-2"
href={href}
rel="noreferrer"
rel="noopener noreferrer"
target="_blank"
{...props}
>