使用go搭建一个简单的web服务器(4)预防跨站脚本

使用go搭建一个简单的web服务器(4)预防跨站脚本,第1张

概述1.登陆页面 <html><head><title>login</title></head><body><form action="http://127.0.0.1:9090/login" method="post">用户名:<input type="text" name="username">密码:<input type="password" name="passwo

1.登陆页面

<HTML><head><Title>login</Title></head><body><form action="http://127.0.0.1:9090/login" method="post">用户名:<input type="text" name="username">密码:<input type="password" name="password"><input type="submit" value="登陆"></form></body></HTML>

2.后端处理逻辑

package mainimport (    "fmt"    "HTML/template"    "log"    "net/http"    "strings"    text_template "text/template")func sayhelloname(w http.ResponseWriter,r *http.Request) {    r.ParseForm() //解析参数,默认是不会解析的。    fmt.Println(r.Form)    fmt.Println("path:",r.URL.Path)    fmt.Println("scheme:",r.URL.Scheme)    fmt.Println(r.Form["url_long"])    for k,v := range r.Form {        fmt.Println("key:",k)        fmt.Println("value:",strings.Join(v,","))    }    fmt.Fprintf(w,"hello,welcome you!") //这个字符串写入到w中,用于返回给客户端。}func login(w http.ResponseWriter,r *http.Request) {    fmt.Println("method: ",r.Method)    if r.Method == "GET" {        t,_ := template.Parsefiles("login.HTML")        t.Execute(w,nil)    } else {        r.ParseForm()        //预防跨站脚本攻击        way := 3        if way == 1 {            //将HTML标签进行转义            fmt.Println("方法一")            fmt.Println("username: ",template.HTMLEscapestring(r.Form.Get("username")))            fmt.Println("password: ",template.HTMLEscapestring(r.Form.Get("password")))            template.HTMLEscape(w,[]byte(r.Form.Get("username"))) //将转义后的用户名字段发送给客户端        } else if way == 2 {            //将HTML标签进行转义            fmt.Println("方法二")            t,err := template.New("foo").Parse(`{{define "T"}}Hello,{{.}}!{{end}}`)            err = t.ExecuteTemplate(w,"T","<script>alert(‘you have been login‘)</script>") //将一段含有脚本的内容发送给客户端            if err != nil {                fmt.Println(err)            }        } else if way == 3 {            //在编辑文章时,有时候就想在文章中加入带有HTML标签的代码来作为示例,那么就不能使用上面的方法进行转义。            fmt.Println("方法三")            t,template.HTML("<script>alert(‘you have been login‘)</script>")) //将一段含有脚本的内容发送给客户端            if err != nil {                fmt.Println(err)            }        } else {            //在编辑文章时,有时候就想在文章中加入带有HTML标签的代码来作为示例,那么就不能使用上面的方法进行转义。            fmt.Println("方法四")            t,err := text_template.New("foo").Parse(`{{define "T"}}Hello,"<script>alert(‘you have been login‘)</script>") //将一段含有脚本的内容发送给客户端            if err != nil {                fmt.Println(err)            }        }    }}func main() {    http.HandleFunc("/",sayhelloname)       //设置访问的路由    http.HandleFunc("/login",login)         //设置访问的路由    err := http.ListenAndServe(":9090",nil) //设置监听的端口    if err != nil {        log.Fatal("ListenAndServe: ",err)    }}
总结

以上是内存溢出为你收集整理的使用go搭建一个简单的web服务器(4)预防跨站脚本全部内容,希望文章能够帮你解决使用go搭建一个简单的web服务器(4)预防跨站脚本所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1033997.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存