GoFrame 模板引擎对变量转义输出- XSS 漏洞

环境:

  • gf v1.14.4
  • go 1.11

官网说明

默认情况下,模板引擎对所有的变量输出并没有使用HTML转码处理,也就是说,如果开发者处理不好,可能会存在XSS漏洞。

不用担心,GF框架当然已经充分考虑到这点,并且为开发者提供了比较灵活的配置参数来控制是否默认转义变量输出的HTML内容。该特性可以通过AutoEncode配置项,或者SetAutoEncode方法来开启/关闭。

需要注意的是,该特性并不会影响include模板内置函数。

使用示例:

  1. 配置文件

    copy

     [viewer]
    delimiters = ["${", "}"]
    autoencode = true
  2. 示例代码

    copy

     package main
    
     import (
    "fmt"
    "github.com/gogf/gf/frame/g"
    ) func main() {
    result, _ := g.View().ParseContent("姓名: ${.name}", g.Map{
    "name": "<script>alert('john');</script>",
    })
    fmt.Println(result)
    }
  3. 执行输出

    copy

     姓名: &lt;script&gt;alert('john');&lt;/script&gt;

那么如果需要进行不转义输出html内容,除了上面得到的不受影响情况(使用include模板内置函数)外,还有吗?

其实还有一个Go原生提供的template.HTML()方法:

func GetSummary(r *ghttp.Request)  {
//测试 gf 模板 动作符号已修改为: ${}
err := r.Response.WriteTpl("readArticle.html", g.Map{
//开启 autoencode = true 配置之后会安全编码,转义所有 html js
"testText": template.HTML("<h1>编码h1?</h1>"),
})

注意此时配置文件已经开启转义输出html内容:

[viewer]
autoencode = true

或者可以通过方法开启:

func main() {
g.Server().Run()
//开启 autoencode 配置之后会安全编码,转义所有 html js
g.View().SetAutoEncode(true)
}

访问处理方法下的路径:

即可成功输出html内容,但是此时会存在XSS漏洞。

GoFrame 模板引擎对变量转义输出- XSS 漏洞的更多相关文章

  1. django模板引擎自定义变量

    定义临时变量: {% with i=1 %} {{i}} {% endwith %} 定义对临时变量操作的tag 在templatetags中创建set_val.py 内容是 from django ...

  2. swig模板引擎和ejs模板引擎

    swig模板引擎的基本用法: 1. 变量 {{ name }}  //name名前后必须要加空格,不加就会报错 2. 属性 {{ student.name }} 3. 模板继承 swig使用exten ...

  3. Jade(Pug) 模板引擎使用文档

    本篇内容 在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includ ...

  4. Handlebars模板引擎之进阶

    取得索引 我想取得索引作为序号这个是常用的.在handlebars也是存在的. 就是使用 @index 来获取索引 {{#each this}} <tr> <td>{{ @in ...

  5. nodejs jade 模板 引擎的使用方法

    1.新建项目 2.使用模板引擎 app.set('view engine','jade'); 3.使用render渲染一个视图 res.render(用于指定需要被渲染的视图(必选),本地变量(可选) ...

  6. Jade 模板引擎使用

    在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includes) 模 ...

  7. Jade模板引擎使用详解

    在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includes) 模 ...

  8. PHP 安全三板斧:过滤、验证和转义之转义篇 & Blade模板引擎避免XSS攻击原理探究

    PHP 转义 实现 把输出渲染成网页或API响应时,一定要转义输出,这也是一种防护措施,能避免渲染恶意代码,造成XSS攻击,还能防止应用的用户无意中执行恶意代码. 我们可以使用前面提到的 htmlen ...

  9. web框架详解之 tornado 四 模板引擎、session、验证码、xss

    一.模板引擎 基本使用 继承,extends 页面整体布局用继承 导入,include 如果是小组件等重复的那么就用导入 下面是目录 首先在controllers里面创建一个文件,文件里面是页面类 # ...

随机推荐

  1. Java创建二叉树、二叉树的遍历

    创建二叉树: public class Node {     // 左子节点     public Node leftNode;     // 右子节点     public Node rightNo ...

  2. python面向对象(类与对象)

    面向对象思想 关注公众号"轻松学编程"了解更多. 1.面向对象的设计思想 面向对象是基于万物皆对象这个哲学观点. 2.面向对象和面向过程的区别 面向过程 在生活中: 它是一种看待问 ...

  3. 840. Magic Squares In Grid ——weekly contest 86

    题目链接:https://leetcode.com/problems/magic-squares-in-grid/description attention:注意给定的数字不一定是1-9. time: ...

  4. c#mysql数据库

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. HTML+JavaScript实现一个简单抽奖功能

    为什么会做这个东西呢,纯属好玩,闲的其实是在上次班会的时候想到的,班会的时候叫人回答问题,没人回答当时就想,我如果抽签抽到你了,你还是不回答吗??好吧,一切都是扯淡先来看看页面效果吧:点击抽取就可以抽 ...

  6. python风格代码荟萃

    今天总结一下在python中常用的一些风格代码,这些可能大家都会用,但有时可能也会忘记,在这里总结,工大家参考~~~ 先点赞在看,养成习惯~~~ 标题遍历一个范围内的数字 for i in xrang ...

  7. CSS三大特性及权重叠加

    层叠性: 1.样式冲突,遵循的原则是就近原则,哪个样式离结构近,就执行哪个样式 2.样式不冲突,不会层叠 继承性: 子标签会继承父标签的某些样式,如文本颜色和字号 优先级: 当同一个元素指定多个选择器 ...

  8. BIM+GIS它们各有什么优缺点

    BIM+GIS它们各有什么优缺点?应用有哪些优势?BIM模型精细程度高,语义信息丰富,侧重整合和管理建筑物自身所有阶段信息,包括建筑物所有微观图形化和非图形化信息,三维GIS侧重宏观.大范围地理环境与 ...

  9. Python学习笔记2:基本数据类型

    Python中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象 ...

  10. Redis系列文章-数据结构篇

    Redis系列文章 前言: 工作原因,在学习mybatis知识后,2个月没有补充新的知识了,最近拿起书本开始学习.打算写下这个Redis系列的文章. 目录结构如下: Redis内置数据结构 Redis ...