diff --git a/web/app/components/base/chat/embedded-chatbot/header/index.tsx b/web/app/components/base/chat/embedded-chatbot/header/index.tsx index 869f88efb6..95ba6d212d 100644 --- a/web/app/components/base/chat/embedded-chatbot/header/index.tsx +++ b/web/app/components/base/chat/embedded-chatbot/header/index.tsx @@ -66,7 +66,9 @@ const Header: FC = ({ const listener = (event: MessageEvent) => handleMessageReceived(event) window.addEventListener('message', listener) - window.parent.postMessage({ type: 'dify-chatbot-iframe-ready' }, '*') + // Security: Use document.referrer to get parent origin + const targetOrigin = document.referrer ? new URL(document.referrer).origin : '*' + window.parent.postMessage({ type: 'dify-chatbot-iframe-ready' }, targetOrigin) return () => window.removeEventListener('message', listener) }, [isIframe, handleMessageReceived]) diff --git a/web/hooks/use-oauth.ts b/web/hooks/use-oauth.ts index 34ed8bafb0..8fb2707804 100644 --- a/web/hooks/use-oauth.ts +++ b/web/hooks/use-oauth.ts @@ -10,12 +10,15 @@ export const useOAuthCallback = () => { const errorDescription = urlParams.get('error_description') if (window.opener) { + // Use window.opener.origin instead of '*' for security + const targetOrigin = window.opener?.origin || '*' + if (subscriptionId) { window.opener.postMessage({ type: 'oauth_callback', success: true, subscriptionId, - }, '*') + }, targetOrigin) } else if (error) { window.opener.postMessage({ @@ -23,12 +26,12 @@ export const useOAuthCallback = () => { success: false, error, errorDescription, - }, '*') + }, targetOrigin) } else { window.opener.postMessage({ type: 'oauth_callback', - }, '*') + }, targetOrigin) } window.close() }