Heim >Backend-Entwicklung >Golang >So überprüfen Sie, ob die Eingabe ein gültiges HTML-Tag in Golang ist
Go-Sprache ist eine schnelle, effiziente und stark typisierte Programmiersprache, die in der Entwicklung von Netzwerkdiensten, Cloud Computing, Datenwissenschaft, Internetfinanzen und anderen Bereichen weit verbreitet ist. Die Eingabevalidierung ist ein sehr wichtiges Thema bei der Entwicklung von Webanwendungen und es ist eine häufige Anforderung, zu überprüfen, ob die HTML-Tags in der Eingabe gültig sind. Im Folgenden stellen wir vor, wie diese Anforderung in der Go-Sprache implementiert wird.
HTML-Tags spielen in Webseiten eine wichtige Rolle. Sie definieren die Struktur, den Stil und das interaktive Verhalten der Seite. Bei der Verarbeitung von Benutzereingaben müssen wir jedoch auf das Risiko achten, dass HTML-Tags missbraucht werden, beispielsweise durch potenzielle XSS-Angriffe (Cross-Site-Scripting-Angriffe) und andere Sicherheitsprobleme. Daher überprüfen einige Anwendungen, ob die Eingabe schädliche oder illegale Tags enthält, um die Sicherheit und Zuverlässigkeit der Seite zu gewährleisten. Im Folgenden stellen wir vor, wie Sie überprüfen können, ob die Eingabe ein gültiges HTML-Tag in der Go-Sprache ist.
Die erste Methode besteht darin, die native Bibliothek von Go zu verwenden. Wir können die Funktion html.Parse verwenden, um den HTML-Code in einen Knotenbaum zu analysieren und dann den Typ und die Attribute des Knotens zu überprüfen. Hier ist ein Beispielcode:
package main import ( "fmt" "golang.org/x/net/html" "strings" ) func isValidHTMLTags(html string) bool { doc, err := html.Parse(strings.NewReader(html)) if err != nil { fmt.Println(err) return false } for c := doc.FirstChild; c != nil; c = c.NextSibling { if c.Type == html.ElementNode { switch c.Data { case "a", "em", "strong": // 检查<a>、<em>、<strong>标签是否包含 href 和 title 属性 if !containsAttributes(c, "href", "title") { return false } case "img": // 检查<img>标签是否包含 src、alt、和 title 属性 if !containsAttributes(c, "src", "alt", "title") { return false } default: // 其他不允许的标签 return false } } } return true } func containsAttributes(n *html.Node, attrs ...string) bool { for _, attr := range attrs { found := false for _, a := range n.Attr { if a.Key == attr { found = true break } } if !found { return false } } return true } func main() { html1 := "<p>Hello, <em>world!</em></p>" fmt.Println(isValidHTMLTags(html1)) // output: true html2 := "<script>alert('XSS');</script>" fmt.Println(isValidHTMLTags(html2)) // output: false html3 := "<a href='https://www.google.com' title='Google'>Google</a>" fmt.Println(isValidHTMLTags(html3)) // output: true html4 := "<img src='image.png' alt='Image' title='My image'/>" fmt.Println(isValidHTMLTags(html4)) // output: true html5 := "<audio src='music.mp3'></audio>" fmt.Println(isValidHTMLTags(html5)) // output: false }
Im obigen Code verwenden wir zunächst die Funktion html.Parse, um den eingegebenen HTML-Code in einen Knotenbaum zu analysieren. Dann durchlaufen Sie jeden Knoten. Wenn der Knotentyp ElementNode ist, müssen Sie den Labelnamen und die Attribute des Knotens überprüfen. In diesem Beispiel erlauben wir nur 3499910bf9dac5ae3c52d5ede7383485
, 907fae80ddef53131f3292ee4f81644b
, 8e99a69fbe029cd4e2b854e244eab143
und <img> ;
-Tag, gibt false zurück, wenn andere Tags gefunden werden. Bei zulässigen Tags müssen wir auch prüfen, ob sie die erforderlichen Attribute enthalten. Beispielsweise muss das 3499910bf9dac5ae3c52d5ede7383485
-Tag den href
und den title-Attribute und das <code>a1f02c36ba31691bcfe87b2722de723b
-Tag muss die Attribute src
, alt
und title
enthalten Attribute. Bei der Überprüfung von Attributen können wir die Funktion enthältAttribute verwenden, die einen Knoten und eine Liste von Attributen akzeptiert und prüft, ob der Knoten alle angegebenen Attribute enthält. 3499910bf9dac5ae3c52d5ede7383485
、907fae80ddef53131f3292ee4f81644b
、8e99a69fbe029cd4e2b854e244eab143
和a1f02c36ba31691bcfe87b2722de723b
标签,如果发现其他标签则返回false。 对于被允许的标签,我们还需要检查它们是否包含必要的属性,例如3499910bf9dac5ae3c52d5ede7383485
标签需要包含href
和title
属性,而a1f02c36ba31691bcfe87b2722de723b
标签需要包含src
、alt
和title
属性。在检查属性时,我们可以使用containsAttributes函数,该函数接受一个节点和一个属性列表,检查该节点是否包含所有指定的属性。
第二种方法是使用第三方库,Go语言中的一些第三方库可以帮助我们更轻松地验证输入中的HTML标签,例如github.com/microcosm-cc/bluemonday和github.com/theplant/htmlsanitizer。这些库提供了一些简单的API,使我们可以轻松地定义白名单或黑名单,并过滤掉不符合要求的标签。例如,下面是使用bluemonday库的示例代码:
package main import ( "fmt" "github.com/microcosm-cc/bluemonday" ) func main() { html := "<p>Hello, <em>world!</em></p>" policy := bluemonday.StrictPolicy() sanitizedHTML := policy.Sanitize(html) fmt.Println(sanitizedHTML) // output: <p>Hello, <em>world!</em></p> }
上述代码中,我们首先定义了一个默认的安全策略(bluemonday.StrictPolicy()),然后使用policy.Sanitize函数过滤输入HTML代码。根据默认的安全策略,我们允许907fae80ddef53131f3292ee4f81644b
rrreee
Im obigen Code definieren wir zunächst eine Standardsicherheitsrichtlinie (bluemonday.StrictPolicy()) und verwenden dann die Funktion „policy.Sanitize“, um den Eingabe-HTML zu filtern Code. Gemäß der Standardsicherheitsrichtlinie erlauben wir das Tag907fae80ddef53131f3292ee4f81644b
, andere Tags jedoch nicht. Da bluemonday einen höheren Grad an Anpassung unterstützt, können wir darauf basierend unsere eigene Sicherheitsrichtlinie definieren. Informationen zur spezifischen Verwendung finden Sie in der Dokumentation. 🎜🎜Stellen Sie sicher, dass die Benutzereingabe ein gültiges HTML-Tag ist. Dies ist eine häufige und wichtige Anforderung. Das Obige stellt kurz vor, wie Sie native Go-Bibliotheken und Bibliotheken von Drittanbietern verwenden, um diese Anforderung zu erfüllen. Ich hoffe, dass es für Sie hilfreich ist. 🎜Das obige ist der detaillierte Inhalt vonSo überprüfen Sie, ob die Eingabe ein gültiges HTML-Tag in Golang ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!