Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 55
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
Sanitizer
0.00% covered (danger)
0.00%
0 / 55
0.00% covered (danger)
0.00%
0 / 3
72
0.00% covered (danger)
0.00%
0 / 1
 sanitizeStackTrace
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 applyCatchAllPatterns
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
2
 applySpecificPatterns
0.00% covered (danger)
0.00%
0 / 33
0.00% covered (danger)
0.00%
0 / 1
42
1<?php
2
3namespace BO\Slim\Helper;
4
5class 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}