登录
首页 >  Golang >  Go问答

Golang结构解组xss

来源:stackoverflow

时间:2024-04-20 12:00:36 316浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《Golang结构解组xss》,聊聊,我们一起来看看吧!

问题内容

我有一个结构体,其中注入了 xss。为了删除它,我将其 json.marshal ,然后运行 ​​json.htmlescape 。然后我将 json.unmarshal 到一个新的结构中。

问题是新结构仍然注入了 xss。

我根本不知道如何从结构中删除 xss。我可以编写一个函数来在现场执行此操作,但考虑到有 json.htmlescape 并且我们可以将其解组回来,它应该可以正常工作,但事实并非如此。

type Person struct {
    Name string `json:"name"`
}
func main() {
    var p, p2 Person
     // p.Name has XSS
    p.Name = ""
    var tBytes bytes.Buffer

    // I marshal it so I can use json.HTMLEscape
    marshalledJson, _ := json.Marshal(p)
    json.HTMLEscape(&tBytes, marshalledJson)

    // here I insert it into a new struct, sadly the p2 struct has the XSS still 
    err := json.Unmarshal(tBytes.Bytes(), &p2)
    if err != nil {
        fmt.Printf(err.Error())
    }
    fmt.Print(p2)

}

预期结果是 p2.要清理的名称,例如


解决方案


首先,json.HTMLEscape 不符合您的要求:

但你想要的是:

您可以通过调用 html.EscapeString 获得,但不能通过任何 json 编码器例程获得。1

其次,如果你检查 json.Marshal 的结果,你会发现它已经用 \u003c 替换了 < 等等 - 它已经完成了 json.HTMLEscape,所以 json.HTMLEscapezqbendc zqb 没有任何字符代替!有关示例,请参阅 https://play.golang.org/p/Zergs3bwElY

正如 Ahmed Hashem 指出的那样,如果您确实想要执行此类操作,则可以使用反射来查找字符串字段(如 Implement XSS protection in Golang 中所示),但一般来说,在输入点执行此操作可能更明智。请注意,那里的答案不会递归到可能包含字符串的内部对象。

1JSON 不是 HTML,也不是 XML 等。请在您的头脑和代码中将它们分开。

另请参阅 https://medium.com/@oazzat19/what-is-the-difference-between-html-vs-xml-vs-json-254864972bbb,这是我们如何到达这里的简短摘要,据我所知没有错误,这对于随机网络文章来说非常好。 :-) 当使用 JSON 时,我们得到非常简单的类型数据:对象、字符串、数字、列表/数组、布尔值和 null;例如,请参见 https://www.w3schools.com/js/js_json_syntax.asphttps://www.w3schools.com/js/js_json_objects.asphttps://cswr.github.io/JsonSchema/spec/basic_types/

好了,本文到此结束,带大家了解了《Golang结构解组xss》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>