mirror of
https://github.com/github/codeql.git
synced 2026-01-30 14:52:57 +01:00
Update xpath example, use goxpath package
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user