diff --git a/components/phishing/url-list.tsx b/components/phishing/url-list.tsx new file mode 100644 index 0000000..f7f4002 --- /dev/null +++ b/components/phishing/url-list.tsx @@ -0,0 +1,50 @@ +'use client'; + +/* UrlList — inert, copy-only rendering of URLs extracted from a reported + * phishing/spam email (REVIEW-03, D-09). + * + * D-09 is a deliberately STRICTER-than-sanitization posture: extracted URLs + * are attacker-controlled content and must never be rendered as anything + * clickable. There is no anchor tag with a navigation attribute, no + * ``, and no navigating `onClick` anywhere in this file — the only + * affordance is copy-to-clipboard via an icon-only button. Do not "improve" + * this by adding a real link. */ + +import { Copy } from 'lucide-react'; +import { toast } from 'sonner'; +import { Button } from '@/components/ui/button'; + +interface UrlListProps { + urls: string[]; +} + +export function UrlList({ urls }: UrlListProps) { + if (urls.length === 0) { + return ( +
No URLs found in this message.
+ ); + } + + async function handleCopy(url: string) { + await navigator.clipboard.writeText(url); + toast.success('Copied'); + } + + return ( +{url}
+
+