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. Centos中部署NetCore项目(一)

    前言 本文是基于centos8,dotnetcore3.1. (为了服务器安全使用,程序部署最好不要直接root账号进行操作.) 如果使用sudo命令时候,提示用户不在sudoers文件中的解决方法. ...

  2. 面试官问我redis数据类型,我回答了8种

    面试官:小明呀,redis 有几种数据结构呀? 小明:8 种 面试官:那你说一下分别是什么? 小明:raw,int,ht,zipmap,linkedlist,ziplist,intset,skipli ...

  3. 八位“Booth二位乘算法”乘法器

    目录 八位"Booth二位乘算法"乘法器 原理 补码乘法器 Booth一位乘 Booth二位乘 设计思路 减法变加法 vivado特性 设计文件 综合电路 测试文件 仿真波形 八位 ...

  4. Pandas_VBA_数据分类比较

    Python与VBA的比较2 需求: input文件中有两列数据,第一列为Name,第二列为Score,Name列里有重复的值,要求按照name的唯一值统计 score,输出到output文件按中. ...

  5. python_计算器

    import re from functools import reduce # 定义一个只计算两个数的乘法或除法的函数: def multiply_division(exp): if "* ...

  6. TODO_LIST

    H5 blog: http://html5doctor.com/designing-a-blog-with-html5/ 绝尘单词本----H5+Web NIO+netty+RPC

  7. netfilter 的扩展功能 helper tftp-nat

    /* 需要对conntrack进行功能扩展的协议,会初始化一个struct nf_conntrack_helper 实例,把该实例注册到Netfilter中管理的全局哈希表中. 查找helper使用的 ...

  8. 全文思维导图------redis设计与实现

  9. CSP-S 2020 Travels

    CSP-S 2020 Travels DAY 0 I hit the board in the morning before departure The rest of the time is dec ...

  10. mysql参数总结

    1.innodb_old_blocks_pct 确定modpoint位置,默认37,(3/8=37%)可以通过这个调整young与old比. innodb_old_blocks_time:当有大的查询 ...