new capacity bits (#67)

This commit is contained in:
Eli Peter 2026-05-07 01:29:31 -04:00 committed by GitHub
parent afaffc0df6
commit 7d0e7320e2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
261 changed files with 10591 additions and 231 deletions

View file

@ -0,0 +1,8 @@
# Baseline: expression is a compile-time constant. No taint reaches
# `tree.xpath` so no XPATH_INJECTION finding fires.
from lxml import etree
def lookup():
tree = etree.parse("users.xml")
return tree.xpath("//user[@role='admin']")

View file

@ -0,0 +1,17 @@
# Safe: user-supplied substring routed through the project-local
# `escape_xpath` helper before being concatenated into the XPath expression.
# The sanitizer clears the XPATH_INJECTION cap so the sink does not fire.
from lxml import etree
from flask import request
def escape_xpath(raw):
return raw.replace("'", "'")
def lookup():
tree = etree.parse("users.xml")
user = request.form["user"]
safe = escape_xpath(user)
expr = "//user[name='" + safe + "']"
return tree.xpath(expr)

View file

@ -0,0 +1,12 @@
# Unsafe: tainted form data concatenated into an XPath expression and passed
# to lxml's `tree.xpath()`. Suffix matching on `xpath` catches the
# bound-receiver call directly.
from lxml import etree
from flask import request
def lookup():
tree = etree.parse("users.xml")
user = request.form["user"]
expr = "//user[name='" + user + "']"
return tree.xpath(expr)