import python import semmle.python.dataflow.TaintTracking import semmle.python.security.strings.Untrusted class SimpleSource extends TaintSource { SimpleSource() { this.(NameNode).getId() = "TAINTED_STRING" } override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalStringKind } override string toString() { result = "taint source" } } class ListSource extends TaintSource { ListSource() { this.(NameNode).getId() = "TAINTED_LIST" } override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalStringSequenceKind } override string toString() { result = "list taint source" } } class DictSource extends TaintSource { DictSource() { this.(NameNode).getId() = "TAINTED_DICT" } override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalStringDictKind } override string toString() { result = "dict taint source" } } class TestConfig extends TaintTracking::Configuration { TestConfig() { this = "TestConfig" } override predicate isSanitizer(Sanitizer sanitizer) { sanitizer instanceof UrlsplitUrlparseTempSanitizer } override predicate isSource(TaintTracking::Source source) { source instanceof SimpleSource or source instanceof ListSource or source instanceof DictSource } override predicate isSink(TaintTracking::Sink sink) { none() } }