美文网首页
node服务器渲染

node服务器渲染

作者: 萘小蒽 | 来源:发表于2020-08-05 10:18 被阅读0次

当浏览器请求到node的路由,以详情页(./details/52314 数字部分为详情id)请求为比方,根据请求地址,node的路由会转发到详情页的逻辑处理中,由于详情页中带着ID,

模板渲染

node模板渲染过程。.png
  • xss(跨站脚本)过滤、模板helper函数

使用node的VM模块将数据渲染成模板;

var vm =  require('vm');
var data = {
    name:"小余"
}
console.log(vm.runInNewContext("`<h2>${data.name}</h2>`",{data}))
运行结果:<h2>小余</h2>

当数据改成标签;

var vm =  require('vm');
var data = {
    name:"<script></script>"
}
console.log(vm.runInNewContext("`<h2>${data.name}</h2>`",{data}))
运行结果:<h2><script></script></h2>

script标签被原封不动的渲染在H2标签内,如果script内部有代码出现,它将在浏览器渲染后,马上被执行。

所以我们需要一个xss过滤函数;

var vm = require('vm');
// var data = {
//     name:"小余"
// }
var data = {
    name: "<script></script>"
}
console.log(vm.runInNewContext("`<h2>${filterXss(data.name)}</h2>`", {
    data, filterXss: function (str) {
        if (!str) return "";
        return String(str).replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, "&quot;").replace(/'/g, "&#039;");
    }
}))
运行结果:<h2>&lt;script&gt;&lt;/script&gt;</h2>

helper函数和上述的filterXss函数写法是一样的。

  • include子模板
var vm = require('vm');
// var data = {
//     name:"小余"
// }
var data = {
    name: "<script></script>"
}
console.log(vm.runInNewContext("`<h2>${filterXss(data.name)}</h2>`", {
    data, filterXss: function (str) {
        if (!str) return "";
        return String(str).replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, "&quot;").replace(/'/g, "&#039;");
    }
}))

相关文章

网友评论

      本文标题:node服务器渲染

      本文链接:https://www.haomeiwen.com/subject/buutqktx.html