W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
1.11.1 【必須】安全的Vue服務(wù)器端渲染(Vue SSR)
{{{ data }}}
表達(dá)式中// bad: 將用戶輸入替換進(jìn)模板
const app = new Vue({
template: appTemplate.replace("word", __USER_INPUT__),
});
renderer.renderToString(app);
// bad: 渲染后的html再拼接不受信的外部輸入
return new Promise(((resolve) => {
renderer.renderToString(component, (err, html) => {
let htmlOutput = html;
htmlOutput += `${__USER_INPUT__}`;
resolve(htmlOutput);
});
}));
1.11.2 【必須】安全地使用EJS、LoDash、UnderScore進(jìn)行服務(wù)器端渲染
lodash.Template:
// bad: 將用戶輸入送進(jìn)模板
const compiled = _.template(`<b>${__USER_INPUT__}<%- value %></b>`);
compiled({ value: "hello" });
ejs:
// bad: 將用戶輸入送進(jìn)模板
const ejs = require("ejs");
const people = ["geddy", "neil", "alex"];
const html = ejs.render(`<%= people.join(", "); %>${__USER_INPUT__}`, { people });
<%= data %>
,盡管在默認(rèn)情況下<%= data %>
存在過濾,在編寫HTML插值模板時(shí)需注意:<base data-id = "<%= __USER_INPUT__ %>">
<script></script>
標(biāo)簽或on*的html屬性中時(shí),如<script>var id = <%= __USER_INPUT__ %></script>
,須按照1.6.3中的做法或白名單方法進(jìn)行過濾,框架/組件的過濾在此處不起作用1.11.3 【必須】在自行實(shí)現(xiàn)狀態(tài)存儲(chǔ)容器并將其JSON.Stringify序列化后注入到HTML時(shí),必須進(jìn)行安全過濾
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: