Skip to content

fix: 在render时将ssr-script排除, 避免业务代码注入; #5

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 28, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,16 @@ const renderDom = async (ctx:IContext, viewName:string, initProps?:any, options?
html = await getStream(html);
}

html = await engine.render(html, state);
// 在SSR模式中, 将__SSR_DATA_匹配出来, 避免其中内容被模板引擎执行, 避免注入类攻击
const ssrReg = new RegExp(/<script[^>]*>window.__SSR_DATA__=([\s\S]*?)<\/script>/)
const placeholderStr = '<!--plAcehoLder-->'
const ssrScriptStr = html.match?.(ssrReg)?.[0] || ''
const renderHtml = html.replace(ssrReg, placeholderStr) // without ssr script

// engine rendering
html = await engine.render(renderHtml, state);
// final result
html = html.replace(placeholderStr, ssrScriptStr)
}

return html;
Expand Down