mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
fix(codeql): validate external URL scheme in webview openExternal and add rel="noopener noreferrer" on external links
This commit is contained in:
parent
b6daf7b0ae
commit
5a3a101efe
2 changed files with 26 additions and 4 deletions
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue