响应输出

1.【必须】设置正确的HTTP响应包类型

  • 响应头Content-Type与实际响应内容,应保持一致。如:API响应数据类型是json,则响应头使用application/json;若为xml,则设置为text/xml

2.【必须】添加安全响应头

  • 所有接口、页面,添加响应头 X-Content-Type-Options: nosniff
  • 所有接口、页面,添加响应头X-Frame-Options。按需合理设置其允许范围,包括:DENYSAMEORIGINALLOW-FROM origin。用法参考:MDN文档

3.【必须】外部输入拼接到HTTP响应头中需进行过滤

  • 应尽量避免外部可控参数拼接到HTTP响应头中,如业务需要则需要过滤掉\r\n等换行符,或者拒绝携带换行符号的外部输入。

4.【必须】外部输入拼接到response页面前进行编码处理

  • 直出html页面或使用模板生成html页面的,推荐使用text/template自动编码,或者使用html.EscapeStringtext/template<, >, &, ',"等字符进行编码。
import(
    "html/template"
)        

func outtemplate(w http.ResponseWriter,r *http.Request) {
    param1 := r.URL.Query().Get("param1")
    tmpl := template.New("hello")
    tmpl, _ = tmpl.Parse(`{{define "T"}}{{.}}{{end}}`)
    tmpl.ExecuteTemplate(w, "T", param1)
}
最后编辑: kuteng  文档更新时间: 2021-06-04 17:24   作者:kuteng