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)预防跨站脚本所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)