Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 55 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
Sanitizer | |
0.00% |
0 / 55 |
|
0.00% |
0 / 3 |
72 | |
0.00% |
0 / 1 |
sanitizeStackTrace | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
applyCatchAllPatterns | |
0.00% |
0 / 19 |
|
0.00% |
0 / 1 |
2 | |||
applySpecificPatterns | |
0.00% |
0 / 33 |
|
0.00% |
0 / 1 |
42 |
1 | <?php |
2 | |
3 | namespace BO\Slim\Helper; |
4 | |
5 | class Sanitizer |
6 | { |
7 | public static function sanitizeStackTrace($trace) |
8 | { |
9 | $trace = self::applyCatchAllPatterns($trace); |
10 | |
11 | $trace = self::applySpecificPatterns($trace); |
12 | |
13 | return $trace; |
14 | } |
15 | |
16 | protected static function applyCatchAllPatterns($trace) |
17 | { |
18 | $trace = preg_replace('/mysql:dbname=[^;]+;host=[^;]+;port=\d+/', 'mysql:dbname=***;host=***;port=***', $trace); |
19 | $trace = preg_replace('/sqlite:[^;]+/', 'sqlite:***', $trace); |
20 | |
21 | $trace = preg_replace('/[^:\s]+:[^@\s]+@[^:\s]+:\d+/', '***:***@***:***', $trace); |
22 | $trace = preg_replace('/[^:\s]+:[^@\s]+@[^:\s]+/', '***:***@***', $trace); |
23 | |
24 | $trace = preg_replace('/port=\d+/', 'port=***', $trace); |
25 | $trace = preg_replace('/:\d+(\/|$)/', ':***$1', $trace); |
26 | |
27 | $trace = preg_replace('/@[\d\.]+/', '@***', $trace); // IP addresses |
28 | $trace = preg_replace('/@[a-zA-Z0-9\-\.]+/', '@***', $trace); // Hostnames |
29 | $trace = preg_replace('/host=[a-zA-Z0-9\-\.]+/', 'host=***', $trace); // Hostnames in connection strings |
30 | $trace = preg_replace('/host=\d+\.\d+\.\d+\.\d+/', 'host=***', $trace); // IP addresses in connection strings |
31 | |
32 | $trace = preg_replace('/dbname=[a-zA-Z0-9\-_]+/', 'dbname=***', $trace); |
33 | $trace = preg_replace('/database \'[a-zA-Z0-9\-_]+\'/', 'database \'***\'', $trace); |
34 | |
35 | $trace = preg_replace('/user=\'[^\']+\'/', 'user=\'***\'', $trace); |
36 | $trace = preg_replace('/user=[^;]+/', 'user=***', $trace); |
37 | |
38 | $trace = preg_replace('/password=\'[^\']+\'/', 'password=\'***\'', $trace); |
39 | $trace = preg_replace('/password=[^;]+/', 'password=***', $trace); |
40 | |
41 | $trace = preg_replace('/Access denied for user \'[^\']+\'@\'[^\']+\'/', 'Access denied for user \'***\'@\'***\'', $trace); |
42 | $trace = preg_replace('/Access denied for user [^@]+@[^\s]+/', 'Access denied for user ***@***', $trace); |
43 | |
44 | return $trace; |
45 | } |
46 | |
47 | protected static function applySpecificPatterns($trace) |
48 | { |
49 | if (defined('\App::DB_PASSWORD')) { |
50 | $password = \App::DB_PASSWORD; |
51 | $encodedPassword = preg_quote($password, '/'); |
52 | $trace = preg_replace('/' . $encodedPassword . '/', '***', $trace); |
53 | $trace = preg_replace('/' . preg_quote(urlencode($password), '/') . '/', '***', $trace); |
54 | $trace = preg_replace('/\'' . preg_quote($password, '/') . '\'/', '\'***\'', $trace); |
55 | } |
56 | if (defined('\App::DB_USER')) { |
57 | $user = \App::DB_USER; |
58 | $encodedUser = preg_quote($user, '/'); |
59 | $trace = preg_replace('/' . $encodedUser . '/', '***', $trace); |
60 | $trace = preg_replace('/' . preg_quote(urlencode($user), '/') . '/', '***', $trace); |
61 | $trace = preg_replace('/\'' . preg_quote($user, '/') . '\'/', '\'***\'', $trace); |
62 | } |
63 | if (defined('\App::DB_HOST')) { |
64 | $host = \App::DB_HOST; |
65 | $encodedHost = preg_quote($host, '/'); |
66 | $trace = preg_replace('/' . $encodedHost . '/', '***', $trace); |
67 | $trace = preg_replace('/' . preg_quote(urlencode($host), '/') . '/', '***', $trace); |
68 | $trace = preg_replace('/\'' . preg_quote($host, '/') . '\'/', '\'***\'', $trace); |
69 | } |
70 | if (defined('\App::DB_NAME')) { |
71 | $dbname = \App::DB_NAME; |
72 | $encodedDbname = preg_quote($dbname, '/'); |
73 | $trace = preg_replace('/' . $encodedDbname . '/', '***', $trace); |
74 | $trace = preg_replace('/' . preg_quote(urlencode($dbname), '/') . '/', '***', $trace); |
75 | $trace = preg_replace('/\'' . preg_quote($dbname, '/') . '\'/', '\'***\'', $trace); |
76 | } |
77 | if (defined('\App::DB_PORT')) { |
78 | $port = \App::DB_PORT; |
79 | $encodedPort = preg_quote($port, '/'); |
80 | $trace = preg_replace('/' . $encodedPort . '/', '***', $trace); |
81 | $trace = preg_replace('/' . preg_quote(urlencode($port), '/') . '/', '***', $trace); |
82 | $trace = preg_replace('/\'' . preg_quote($port, '/') . '\'/', '\'***\'', $trace); |
83 | $trace = preg_replace('/port=' . $encodedPort . '/', 'port=***', $trace); |
84 | $trace = preg_replace('/port=' . preg_quote(urlencode($port), '/') . '/', 'port=***', $trace); |
85 | } |
86 | |
87 | return $trace; |
88 | } |
89 | } |