diff --git a/webview-ui/src/components/common/Thumbnails.tsx b/webview-ui/src/components/common/Thumbnails.tsx index 9fdf99c57d..ca737be5c6 100644 --- a/webview-ui/src/components/common/Thumbnails.tsx +++ b/webview-ui/src/components/common/Thumbnails.tsx @@ -40,12 +40,36 @@ const Thumbnails = ({ images, style, setImages, onHeightChange }: ThumbnailsProp // Only allow data:image/ URLs since the backend openImage function only supports base64 data URIs const sanitizeImageUrl = (url: string): string => { try { + // Trim whitespace and convert to string to prevent injection + const trimmedUrl = String(url).trim() + + // Reject URLs with potentially dangerous protocols or patterns + const dangerousPatterns = [ + /^javascript:/i, + /^vbscript:/i, + /^data:text\/html/i, + /^data:application\/javascript/i, + /^data:.*script/i, + /