|
15 | 15 | import semmle.code.cpp.ir.dataflow.internal.DefaultTaintTrackingImpl
|
16 | 16 | import TaintedWithPath
|
17 | 17 |
|
| 18 | +string getATopLevelDomain() { |
| 19 | + result = |
| 20 | + [ |
| 21 | + "com", "ru", "net", "org", "de", "jp", "uk", "br", "pl", "in", "it", "fr", "au", "info", "nl", |
| 22 | + "cn", "ir", "es", "cz", "biz", "ca", "eu", "ua", "kr", "za", "co", "gr", "ro", "se", "tw", |
| 23 | + "vn", "mx", "ch", "tr", "at", "be", "hu", "tv", "dk", "me", "ar", "us", "no", "sk", "fi", |
| 24 | + "id", "cl", "nz", "by", "xyz", "pt", "ie", "il", "kz", "my", "hk", "lt", "cc", "sg", "io", |
| 25 | + "edu", "gov" |
| 26 | + ] |
| 27 | +} |
| 28 | + |
18 | 29 | predicate hardCodedAddressOrIP(StringLiteral txt) {
|
19 | 30 | exists(string s | s = txt.getValueText() |
|
20 | 31 | // Hard-coded ip addresses, such as 127.0.0.1
|
21 | 32 | s.regexpMatch("\"[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+\"") or
|
22 | 33 | // Hard-coded addresses such as www.mycompany.com
|
23 |
| - s.matches("\"www.%\"") or |
24 |
| - s.matches("\"http:%\"") or |
25 |
| - s.matches("\"https:%\"") or |
26 |
| - s.matches("\"%.com\"") or |
27 |
| - s.matches("\"%.ru\"") or |
28 |
| - s.matches("\"%.net\"") or |
29 |
| - s.matches("\"%.org\"") or |
30 |
| - s.matches("\"%.de\"") or |
31 |
| - s.matches("\"%.jp\"") or |
32 |
| - s.matches("\"%.uk\"") or |
33 |
| - s.matches("\"%.br\"") or |
34 |
| - s.matches("\"%.pl\"") or |
35 |
| - s.matches("\"%.in\"") or |
36 |
| - s.matches("\"%.it\"") or |
37 |
| - s.matches("\"%.fr\"") or |
38 |
| - s.matches("\"%.au\"") or |
39 |
| - s.matches("\"%.info\"") or |
40 |
| - s.matches("\"%.nl\"") or |
41 |
| - s.matches("\"%.cn\"") or |
42 |
| - s.matches("\"%.ir\"") or |
43 |
| - s.matches("\"%.es\"") or |
44 |
| - s.matches("\"%.cz\"") or |
45 |
| - s.matches("\"%.biz\"") or |
46 |
| - s.matches("\"%.ca\"") or |
47 |
| - s.matches("\"%.eu\"") or |
48 |
| - s.matches("\"%.ua\"") or |
49 |
| - s.matches("\"%.kr\"") or |
50 |
| - s.matches("\"%.za\"") or |
51 |
| - s.matches("\"%.co\"") or |
52 |
| - s.matches("\"%.gr\"") or |
53 |
| - s.matches("\"%.ro\"") or |
54 |
| - s.matches("\"%.se\"") or |
55 |
| - s.matches("\"%.tw\"") or |
56 |
| - s.matches("\"%.vn\"") or |
57 |
| - s.matches("\"%.mx\"") or |
58 |
| - s.matches("\"%.ch\"") or |
59 |
| - s.matches("\"%.tr\"") or |
60 |
| - s.matches("\"%.at\"") or |
61 |
| - s.matches("\"%.be\"") or |
62 |
| - s.matches("\"%.hu\"") or |
63 |
| - s.matches("\"%.tv\"") or |
64 |
| - s.matches("\"%.dk\"") or |
65 |
| - s.matches("\"%.me\"") or |
66 |
| - s.matches("\"%.ar\"") or |
67 |
| - s.matches("\"%.us\"") or |
68 |
| - s.matches("\"%.no\"") or |
69 |
| - s.matches("\"%.sk\"") or |
70 |
| - s.matches("\"%.fi\"") or |
71 |
| - s.matches("\"%.id\"") or |
72 |
| - s.matches("\"%.cl\"") or |
73 |
| - s.matches("\"%.nz\"") or |
74 |
| - s.matches("\"%.by\"") or |
75 |
| - s.matches("\"%.xyz\"") or |
76 |
| - s.matches("\"%.pt\"") or |
77 |
| - s.matches("\"%.ie\"") or |
78 |
| - s.matches("\"%.il\"") or |
79 |
| - s.matches("\"%.kz\"") or |
80 |
| - s.matches("\"%.my\"") or |
81 |
| - s.matches("\"%.hk\"") or |
82 |
| - s.matches("\"%.lt\"") or |
83 |
| - s.matches("\"%.cc\"") or |
84 |
| - s.matches("\"%.sg\"") or |
85 |
| - s.matches("\"%.io\"") or |
86 |
| - s.matches("\"%.edu\"") or |
87 |
| - s.matches("\"%.gov\"") |
| 34 | + s.regexpMatch("\"(www\\.|http:|https:).*\"") or |
| 35 | + s.regexpMatch("\".*\\.(" + strictconcat(getATopLevelDomain(), "|") + ")\"") |
88 | 36 | )
|
89 | 37 | }
|
90 | 38 |
|
|
0 commit comments