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

DesignerA DesignerA     2022-12-23     552

关键词:

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 main

import (
    "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, err := template.New("foo").Parse(`define "T"Hello,.!end`)
            err = t.ExecuteTemplate(w, "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,.!end`)
            err = t.ExecuteTemplate(w, "T", "<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服务了解golang运行web的原理

...文件、模板、Cookie等数据进行设置和操作。http包建立Web服务器先贴个go代码 查看详情

5go与微信开发与web安全(代码片段)

...公众号开发概念1.1公众号的分类1.2微信公众平台1.3微信与服务器交互过程1.4URL接入验证原理1.5成为微信开发者2小程序会话3Go开发微信4跨站脚本攻击XSS4.1XSS简介4.2XSS攻击示例4.3XSS的预防5预防CSRF攻击5.1CSRF简介5.2CSRF的原理5.3预防CSR... 查看详情

5go与微信开发与web安全(代码片段)

...公众号开发概念1.1公众号的分类1.2微信公众平台1.3微信与服务器交互过程1.4URL接入验证原理1.5成为微信开发者2小程序会话3Go开发微信4跨站脚本攻击XSS4.1XSS简介4.2XSS攻击示例4.3XSS的预防5预防CSRF攻击5.1CSRF简介5.2CSRF的原理5.3预防CSR... 查看详情

使用nodejs搭建一个简单的web服务器

使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块、文件系统、url解析模块、路径解析模块、以及301重定向问题,下面我们就... 查看详情

简单xss跨站脚本攻击实验

 原理:恶意Web用户将代码植入到提供给其它用户使用的页面中,如果程序没有经过过滤或者过滤敏感字符不严密就直接输出或者写入数据库。合法用户在访问这些页面的时候,程序将数据库里面的信息输出,这些恶意代码就... 查看详情

5go与微信开发与web安全(代码片段)

...公众号开发概念1.1公众号的分类1.2微信公众平台1.3微信与服务器交互过程1.4URL接入验证原理1.5成为微信开发者2小程序会话3Go开发微信4跨站脚本攻击XSS4.1XSS简介4.2XSS攻击示例4.3XSS的预防5预防CSRF攻击5.1CSRF简介5.2CSRF的原理5.3预防CSR... 查看详情

跨站脚本

...因就是页面输入的数据变成了代码导致的攻击。本次实验使用javaweb编写的简单程序测试一下代码如下:j 查看详情

使用脚本自建本地yum源

 有一段时间连不上网,搭建服务器测试环境所需要的远端yum源也无法连接,于是想到了自建一个本地的yum源来解决这个问题。搭建本地yum源需要两个东西:一个是web服务器,另一个就是rpm包及包元素据。 搭建web服务器很... 查看详情

使用脚本自建本地yum源

 有一段时间连不上网,搭建服务器环境所需要的远端yum源也无法连接,于是想到了自建一个本地的yum源来解决这个问题。搭建本地yum源需要两个东西:一个是web服务器,另一个就是rpm包及包元素据。 搭建web服务器很简单... 查看详情

使用脚本自建本地yum源

   有一段时间连不上网,搭建服务器环境所需要的远端yum源也无法连接,于是想到了自建一个本地的yum源来解决这个问题。搭建本地yum源需要两个东西:一个是web服务器,另一个就是rpm包及包元素据。   搭... 查看详情

xss简单使用

Xss漏洞在这里我用靶机dvwa来简单介绍一下反射性xss漏洞。跨站脚本攻击(CrossSiteScripting),为不和层叠样式表(CascadingStyleSheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏... 查看详情

xss跨站脚本攻击实验

...DOM型XSS.1)存储型XSS存储型XSS攻击流程如下:(1)黑客在目标服务器(正常服务器)上构造XSS恶意脚本,并将其保存在数据库中;(2)用户登录目标服务器,查看了存在恶意脚本的页面;(3)目标服务器将XSS代码连同正常页面内容一起返回给... 查看详情

跨站脚本攻击xss

...面的html代码会被执行,从而达到恶意用户的特殊目的。一个简单的留言板我们有个页面用于允许用户发表留言,然后在页面底部显示留言列表<!DOCTYPEhtml><html><head><?phpin 查看详情

跨站脚本攻击xss

...面的html代码会被执行,从而达到恶意用户的特殊目的。一个简单的留言板我们有个页面用于允许用户发表留言,然后在页面底部显示留言列表<!DOCTYPEhtml><html><head><?phpin 查看详情

go语言实现简单的一个静态web服务器

packagemainimport("net/http")funcmain(){http.Handle("/",http.FileServer(http.Dir("./www/")))http.ListenAndServe(":8123",nil)}在生成的EXE文件所在目录中创建www子目录,在该目录中放web静态文件。以上是静态文件使用http.FileServer,那么动态文件则用http. 查看详情

利用node.js搭建简单web服务器的方法教程

前言使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块、文件系统、url解析模块、路径解析模块、以及301重定向问题,下面我... 查看详情

xss:跨站脚本攻击

...页面很容易遭到跨站脚本攻击。例如,如下的web页面,它使用js通过用户的名字来向用户问好:<html><head><title>test</title> 查看详情

springboot过滤xss脚本攻击

...全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。    简而言之,就是作恶用户通过表单提交一些前端代 查看详情