İçeriğe geç

XPath enjeksiyonu (ARCH5108)

Anahtar go.security.xpath-injection · Önem error · Kategori security · CWE CWE-643

Girdiden derlenen bir XPath ifadesi (xpath.Compile, htmlquery.FindOne(doc, ...), xmlquery.Find) çağıranın sorguyu yeniden yazmasına izin verir - ' or '1'='1 her düğümü seçer.

expr := fmt.Sprintf("//user[@name='%s']", name)
node := htmlquery.FindOne(doc, expr)
if !validName.MatchString(name) {
return ErrBadName
}
node := htmlquery.FindOne(doc, "//user[@name='"+strings.ReplaceAll(name, "'", "")+"']")

Değeri ifadeye girmeden önce izin listesi deseniyle doğrulayın ya da sabit bir yolla seçip öznitelikleri Go tarafında karşılaştırın.