fix(codeql): validate external URL scheme in webview openExternal and add rel="noopener noreferrer" on external links

This commit is contained in:
Roo Code 2025-10-21 05:29:15 +00:00
parent b6daf7b0ae
commit 5a3a101efe
2 changed files with 26 additions and 4 deletions

View file

@ -979,11 +979,29 @@ export const webviewMessageHandler = async (
case "openMention":
openMention(getCurrentCwd(), message.text)
break
case "openExternal":
if (message.url) {
vscode.env.openExternal(vscode.Uri.parse(message.url))
case "openExternal": {
const url = message.url
if (typeof url === "string") {
try {
const uri = vscode.Uri.parse(url)
const isAllowedScheme = uri.scheme === "http" || uri.scheme === "https"
if (isAllowedScheme) {
await vscode.env.openExternal(uri)
} else {
console.warn(`Blocked external URL with disallowed scheme: ${url}`)
vscode.window.showErrorMessage(
t("common:errors.invalid_url_scheme") || "Invalid URL scheme. Only http/https are allowed.",
)
}
} catch (error) {
console.error("Failed to open external URL:", error)
vscode.window.showErrorMessage(
t("common:errors.open_external_failed") || "Failed to open external URL",
)
}
}
break
}
case "checkpointDiff":
const result = checkoutDiffPayloadSchema.safeParse(message.payload)

View file

@ -442,7 +442,11 @@ const ApiOptions = ({
<label className="block font-medium mb-1">{t("settings:providers.apiProvider")}</label>
{docs && (
<div className="text-xs text-vscode-descriptionForeground">
<VSCodeLink href={docs.url} className="hover:text-vscode-foreground" target="_blank">
<VSCodeLink
href={docs.url}
className="hover:text-vscode-foreground"
target="_blank"
rel="noreferrer noopener">
{t("settings:providers.providerDocumentation", { provider: docs.name })}
</VSCodeLink>
</div>