Update xpath example, use goxpath package

This commit is contained in:
intrigus
2020-03-20 21:09:28 +01:00
parent c7ead88b91
commit 948b79df87

View File

@@ -1,19 +1,32 @@
package main
import (
"net/http"
"github.com/moovweb/gokogiri"
"fmt"
"net/http"
"github.com/ChrisTrenkamp/goxpath"
"github.com/ChrisTrenkamp/goxpath/tree"
)
func processRequest(r *http.Request, doc *XmlDocument) {
r.parseForm()
username := r.Form.Get("username")
password := r.Form.Get("password")
root := doc.Root()
// BAD: User input used directly in an XPath expression
doc, _ := root.SearchWithVariables("//users/user[login/text()='" + username + "' and password/text() = '" + password + "']/home_dir/text()")
func main() {}
// GOOD: Uses parameters to avoid including user input directly in XPath expression
doc, _ := root.SearchWithVariables("//users/user[login/text()=$username and password/text() = $password]/home_dir/text()")
func processRequest(r *http.Request, doc tree.Node) {
r.ParseForm()
username := r.Form.Get("username")
password := r.Form.Get("password")
// BAD: User input used directly in an XPath expression
xPath := goxpath.MustParse("//users/user[login/text()='" + username + "' and password/text() = '" + password + "']/home_dir/text()")
unsafeRes, _ := xPath.ExecBool(doc)
fmt.Println(unsafeRes)
// GOOD: Value of parameters is defined here instead of directly in the query
opt := func(o *goxpath.Opts) {
o.Vars["username"] = tree.String(username)
o.Vars["password"] = tree.String(password)
}
// GOOD: Uses parameters to avoid including user input directly in XPath expression
xPath = goxpath.MustParse("//users/user[login/text()=$username and password/text() = $password]/home_dir/text()")
safeRes, _ := xPath.ExecBool(doc, opt)
fmt.Println(safeRes)
}