refac
This commit is contained in:
@@ -96,7 +96,7 @@
|
||||
>
|
||||
{/if}
|
||||
{:else if token.type === 'image'}
|
||||
<Image src={token.href} alt={token.text} />
|
||||
<Image src={token.href} alt={token.text} allowExternal={true} />
|
||||
{:else if token.type === 'strong'}
|
||||
<strong><svelte:self id={`${id}-strong`} tokens={token.tokens} {onSourceClick} /></strong>
|
||||
{:else if token.type === 'em'}
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
export let src = '';
|
||||
export let alt = '';
|
||||
export let allowExternal = false;
|
||||
|
||||
export let className = ` w-full ${($settings?.highContrastMode ?? false) ? '' : 'outline-hidden focus:outline-hidden'}`;
|
||||
|
||||
@@ -20,7 +21,7 @@
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
let _src = '';
|
||||
$: _src = safeImageUrl(src.startsWith('/') ? `${WEBUI_BASE_URL}${src}` : src);
|
||||
$: _src = safeImageUrl(src.startsWith('/') ? `${WEBUI_BASE_URL}${src}` : src, allowExternal);
|
||||
|
||||
let showImagePreview = false;
|
||||
</script>
|
||||
|
||||
@@ -11,18 +11,20 @@ const PLACEHOLDER_IMAGE = '/favicon.png';
|
||||
* - data:image/* URIs
|
||||
* - Same-origin URLs (starting with WEBUI_BASE_URL)
|
||||
* - Gravatar URLs (https://www.gravatar.com/avatar/)
|
||||
* - External HTTP(S) URLs when allowExternal is true
|
||||
*
|
||||
* All other URLs (including arbitrary http(s):// origins) are rejected to
|
||||
* prevent client-side IP/UA/Referer leaks to attacker-controlled servers.
|
||||
* All other URLs (including arbitrary http(s):// origins by default) are
|
||||
* rejected to prevent client-side IP/UA/Referer leaks to attacker-controlled servers.
|
||||
*/
|
||||
export function safeImageUrl(url: string): string {
|
||||
export function safeImageUrl(url: string, allowExternal = false): string {
|
||||
if (!url || url === '') {
|
||||
return `${WEBUI_BASE_URL}${PLACEHOLDER_IMAGE}`;
|
||||
}
|
||||
|
||||
if (
|
||||
url.startsWith(WEBUI_BASE_URL) ||
|
||||
(WEBUI_BASE_URL && url.startsWith(WEBUI_BASE_URL)) ||
|
||||
url.startsWith('https://www.gravatar.com/avatar/') ||
|
||||
(allowExternal && /^https?:\/\//i.test(url)) ||
|
||||
url.startsWith('data:') ||
|
||||
url.startsWith('/')
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user