b1aba728abbd1bedb5a8ec7e4a2215b9d4e69e2a
bernd input-filtering

bernd authored 17 years ago

1) <?php
Bernd Wurst Added license tags for CC0,...

Bernd Wurst authored 12 years ago

2) /*
3) This file belongs to the Webinterface of schokokeks.org Hosting
4) 
Bernd Wurst Copyright year update

Bernd Wurst authored 6 years ago

5) Written 2008-2018 by schokokeks.org Hosting, namely
Bernd Wurst Added license tags for CC0,...

Bernd Wurst authored 12 years ago

6)   Bernd Wurst <bernd@schokokeks.org>
7)   Hanno Böck <hanno@schokokeks.org>
8) 
9) To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty.
10) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

11) You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see
Bernd Wurst Added license tags for CC0,...

Bernd Wurst authored 12 years ago

12) http://creativecommons.org/publicdomain/zero/1.0/
13) 
14) Nevertheless, in case you use a significant part of this code, we ask (but not require, see the license) that you keep the authors' names in place and return your changes to the public. We would be especially happy if you tell us what you're going to do with this code.
15) */
bernd input-filtering

bernd authored 17 years ago

16) 
bernd Umfangreiche Code-Aufräumar...

bernd authored 17 years ago

17) require_once('inc/error.php');
Hanno Böck replace cracklib with zxcvbn

Hanno Böck authored 8 years ago

18) require_once('vendor/autoload.php');
bernd Umfangreiche Code-Aufräumar...

bernd authored 17 years ago

19) 
bernd input-filtering

bernd authored 17 years ago

20) 
Hanno Böck replace cracklib with zxcvbn

Hanno Böck authored 8 years ago

21) function strong_password($password, $user = array())
bernd * Passwörter mit cracklib p...

bernd authored 17 years ago

22) {
Bernd Wurst support online check for pa...

Bernd Wurst authored 5 years ago

23)     $pwcheck = config('pwcheck');
24)     $result = null;
25)     if ($pwcheck) {
26)         DEBUG($pwcheck);
Bernd Wurst use POST for password checker

Bernd Wurst authored 5 years ago

27)         $req = curl_init($pwcheck);
Bernd Wurst support online check for pa...

Bernd Wurst authored 5 years ago

28)         curl_setopt($req, CURLOPT_RETURNTRANSFER, 1);
29)         curl_setopt($req, CURLOPT_SSL_VERIFYPEER, 1);
30)         curl_setopt($req, CURLOPT_SSL_VERIFYSTATUS, 1);
31)         curl_setopt($req, CURLOPT_CONNECTTIMEOUT, 5);
32)         curl_setopt($req, CURLOPT_TIMEOUT, 5);
33)         curl_setopt($req, CURLOPT_FOLLOWLOCATION, 0);
Bernd Wurst use POST for password checker

Bernd Wurst authored 5 years ago

34)         curl_setopt($req, CURLOPT_POST, 1);
35)         curl_setopt($req, CURLOPT_SAFE_UPLOAD, 1);
36)         curl_setopt($req, CURLOPT_POSTFIELDS, array("password" => $password));
Bernd Wurst support online check for pa...

Bernd Wurst authored 5 years ago

37)         $result = chop(curl_exec($req));
38)         DEBUG($result);
39)     }
40)     if ($result === 'good') {
41)         return true;
42)     } elseif ($result === 'bad') {
43)         return "Das ist kein gutes Passwort!";
44)     }
Bernd Wurst use Zxcvbn as fallback in e...

Bernd Wurst authored 5 years ago

45)     // Kein Online-Check eingerichtet oder der request war nicht erfolgreich
46)     DEBUG('using Zxcvbn for password check!');
47)     $passwordchecker = new ZxcvbnPhp\Zxcvbn();
48)     $strength = $passwordchecker->passwordStrength($password, $user);
49)     DEBUG('password strength: '.$strength['score']);
50)     if ($strength['score'] < 2) {
51)         return "Das Passwort ist zu einfach!";
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

52)     }
bernd * Passwörter mit cracklib p...

bernd authored 17 years ago

53) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

54)     return true;
bernd * Passwörter mit cracklib p...

bernd authored 17 years ago

55) }
56) 
57) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

58) function filter_input_general($input)
bernd input-filtering

bernd authored 17 years ago

59) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

60)     if ($input === null) {
61)         return null;
62)     }
63)     return htmlspecialchars(iconv('UTF-8', 'UTF-8', $input), ENT_QUOTES, 'UTF-8');
bernd Umfangreiche Code-Aufräumar...

bernd authored 17 years ago

64) }
65) 
66) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

67) function verify_input_general($input)
bernd Umfangreiche Code-Aufräumar...

bernd authored 17 years ago

68) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

69)     if (filter_input_general($input) !== $input) {
70)         system_failure("Ihre Daten enthielten ungültige Zeichen!");
71)         logger(LOG_WARNING, 'inc/security', 'verify_input_general', 'Ungültige Daten: '.$input);
72)     } else {
73)         return $input;
74)     }
bernd input-filtering

bernd authored 17 years ago

75) }
76) 
77) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

78) function filter_input_username($input)
bernd input-filtering

bernd authored 17 years ago

79) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

80)     $username=preg_replace("/[^[:alnum:]\_\.\+\-]/", "", $input);
81)     if ($username === "") {
82)         system_failure("Leerer Benutzername!");
83)     }
84)     return $username;
hanno Hatte die Kompatibilität ge...

hanno authored 17 years ago

85) }
86) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

87) function verify_input_username($input)
hanno Hatte die Kompatibilität ge...

hanno authored 17 years ago

88) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

89)     if (filter_input_username($input) != $input) {
90)         logger(LOG_WARNING, 'inc/security', 'verify_input_username', 'Ungültige Daten: '.$input);
91)         system_failure("Ihre Daten enthielten ungültige Zeichen!");
92)     }
bernd input-filtering

bernd authored 17 years ago

93) }
94) 
bernd Umfangreiche Code-Aufräumar...

bernd authored 17 years ago

95) 
96) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

97) function filter_input_hostname($input, $wildcard=false)
bernd check auf hostname

bernd authored 17 years ago

98) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

99)     // FIXME: Eine "filter"-Funktion sollte keinen system_failure verursachen sondern einfach einen bereinigten String liefern.
Hanno remove whitespace in empty...

Hanno authored 6 years ago

100) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

101)     DEBUG('filter_input_hostname("'.$input.'", $wildcard='.$wildcard.')');
Hanno Spezialbehandlung für äöü n...

Hanno authored 6 years ago

102)     $input = strtolower($input);
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

103)     $input = rtrim($input, "\t\n\r\x00 .");
104)     $input = ltrim($input, "\t\n\r\x00 .");
105)     if (preg_replace("/[^.]_/", "", $input) != $input) {
106)         system_failure("Der Unterstrich ist nur als erstes Zeichen eines Hostnames erlaubt.");
107)     }
Hanno Spezialbehandlung für äöü n...

Hanno authored 6 years ago

108)     if (preg_replace("/[^[:alnum:]_*\.\-]/u", "", $input) != $input) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

109)         system_failure("Ihre Daten enthielten ungültige Zeichen!");
110)     }
111)     if (preg_match("/^.+\*/", $input)) {
112)         system_failure("Ihre Daten enthielten ungültige Zeichen (Wildcard-Stern muss ganz vorne stehen)!");
113)     }
114)     if (! $wildcard && preg_replace("/^\*/", "", $input) != $input) {
115)         system_failure("Ihre Daten enthielten ungültige Zeichen (Keine Wildcards erlaubt)!");
116)     }
117)     if (strstr($input, '..')) {
118)         system_failure("Ungültiger Hostname");
119)     }
120)     return $input;
bernd check auf hostname

bernd authored 17 years ago

121) }
122) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

123) function verify_input_hostname($input, $wildcard=false)
bernd Add IP-address patterns

bernd authored 16 years ago

124) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

125)     if (filter_input_hostname($input, $wildcard) != $input) {
126)         logger(LOG_WARNING, 'inc/security', 'verify_input_hostname', 'Ungültige Daten: '.$input);
127)         system_failure("Ihre Daten enthielten ungültige Zeichen!");
128)     }
bernd Add IP-address patterns

bernd authored 16 years ago

129) }
130) 
131) 
Hanno Böck vhost-hostnamen vernünftig...

Hanno Böck authored 6 years ago

132) function verify_input_hostname_utf8($input)
133) {
134)     $puny = idn_to_ascii($input, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46);
135)     if ($puny === false) {
136)         system_failure("Ungültiger Hostname! idn ".$input);
137)     }
138)     $filter = filter_var($puny, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME);
139)     if ($filter === false) {
140)         system_failure("Ungültiger Hostname! filter ".$input);
141)     }
142) }
143) 
144) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

145) function verify_input_ipv4($input)
bernd Add IP-address patterns

bernd authored 16 years ago

146) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

147)     if (! preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/", $input)) {
148)         system_failure('Keine IP-Adresse');
149)     }
bernd Add IP-address patterns

bernd authored 16 years ago

150) }
151) 
152) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

153) function verify_input_ipv6($input)
bernd Add IP-address patterns

bernd authored 16 years ago

154) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

155)     // ripped from Perl module Net-IPv6Addr v0.2
156)     if (! preg_match("/^(([0-9a-f]{1,4}:){7}[0-9a-f]{1,4}|[0-9a-f]{0,4}::|:(?::[a-f0-9]{1,4}){1,6}|(?:[a-f0-9]{1,4}:){1,6}:|(?:[a-f0-9]{1,4}:)(?::[a-f0-9]{1,4}){1,6}|(?:[a-f0-9]{1,4}:){2}(?::[a-f0-9]{1,4}){1,5}|(?:[a-f0-9]{1,4}:){3}(?::[a-f0-9]{1,4}){1,4}|(?:[a-f0-9]{1,4}:){4}(?::[a-f0-9]{1,4}){1,3}|(?:[a-f0-9]{1,4}:){5}(?::[a-f0-9]{1,4}){1,2}|(?:[a-f0-9]{1,4}:){6}(?::[a-f0-9]{1,4}))$/i", $input)) {
157)         system_failure("Ungültige IPv6-Adresse");
158)     }
bernd Add IP-address patterns

bernd authored 16 years ago

159) }
bernd Umfangreiche Code-Aufräumar...

bernd authored 17 years ago

160) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

161) function verify_input_recorddata($input)
Hanno Böck Prüfe DNS-Records auf probl...

Hanno Böck authored 7 years ago

162) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

163)     if (strstr($input, "\\") || strstr($input, '"')) {
164)         system_failure("Ungültige Zeichen");
165)     }
Hanno Böck Prüfe DNS-Records auf probl...

Hanno Böck authored 7 years ago

166) }
bernd Umfangreiche Code-Aufräumar...

bernd authored 17 years ago

167) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

168) function filter_quotes($input)
bernd Im Passwort dürfen auch kei...

bernd authored 17 years ago

169) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

170)     return preg_replace('/["\'`]/', '', $input);
bernd Im Passwort dürfen auch kei...

bernd authored 17 years ago

171) }
172) 
bernd Umfangreiche Code-Aufräumar...

bernd authored 17 years ago

173) 
174) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

175) function filter_shell($input)
bernd Diverse shell-kritische zei...

bernd authored 17 years ago

176) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

177)     return preg_replace('/[^-[:alnum:]\_\.\+ßäöüÄÖÜ/%§=]/', '', $input);
bernd Umfangreiche Code-Aufräumar...

bernd authored 17 years ago

178) }
179) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

180) function verify_shell($input)
bernd Umfangreiche Code-Aufräumar...

bernd authored 17 years ago

181) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

182)     if (filter_shell($input) != $input) {
183)         system_failure("Ihre Daten enthielten ungültige Zeichen!");
184)     }
bernd Diverse shell-kritische zei...

bernd authored 17 years ago

185) }
bernd input-filtering

bernd authored 17 years ago

186) 
bernd Umfangreiche Code-Aufräumar...

bernd authored 17 years ago

187) 
Hanno Böck validiere SSH-Keys korrekt

Hanno Böck authored 7 years ago

188) function filter_ssh_key($key)
189) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

190)     $keyparts = explode(" ", trim($key));
Hanno Böck validiere SSH-Keys korrekt

Hanno Böck authored 7 years ago

191) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

192)     if ((count($keyparts) > 3) || (count($keyparts) < 2)) {
193)         system_failure("Ungültiger SSH-Key!");
194)     }
Hanno Böck validiere SSH-Keys korrekt

Hanno Böck authored 7 years ago

195) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

196)     if (preg_match("/^[a-z0-9]+-[a-z0-9-]+$/", $keyparts[0]) === 0) {
197)         system_failure("Ungültiger SSH-Key!");
198)     }
Hanno Böck validiere SSH-Keys korrekt

Hanno Böck authored 7 years ago

199) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

200)     if (base64_decode($keyparts[1], 1) == false) {
201)         system_failure("Ungültiger SSH-Key!");
202)     }
Hanno Böck validiere SSH-Keys korrekt

Hanno Böck authored 7 years ago

203) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

204)     if ((count($keyparts) === 3) && (preg_match("/^[a-zA-Z0-9@.-_]+$/", $keyparts[2]) === 0)) {
205)         system_failure("Ungültige Zeichen im Kommentar des SSH-Keys!");
206)     }
Hanno Böck validiere SSH-Keys korrekt

Hanno Böck authored 7 years ago

207) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

208)     if (count($keyparts) === 2) {
209)         return $keyparts[0]." ".$keyparts[1];
210)     } else {
211)         return $keyparts[0]." ".$keyparts[1]." ".$keyparts[2];
212)     }
Hanno Böck validiere SSH-Keys korrekt

Hanno Böck authored 7 years ago

213) }
214) 
bernd Umfangreiche Code-Aufräumar...

bernd authored 17 years ago

215) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

216) function check_path($input)
bernd XSS/CSRF-Bugs behoben

bernd authored 17 years ago

217) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

218)     DEBUG("checking {$input} for valid path name");
219)     if ($input != filter_input_general($input)) {
220)         logger(LOG_WARNING, 'inc/security', 'check_path', 'HTML-Krams im Pfad: '.$input);
221)         DEBUG("HTML-Krams im Pfad");
222)         return false;
223)     }
224)     $components = explode("/", $input);
225)     foreach ($components as $item) {
226)         if ($item == '..') {
227)             logger(LOG_WARNING, 'inc/security', 'check_path', '»..« im Pfad: '.$input);
228)             DEBUG("»..« im Pfad");
229)             return false;
230)         }
Hanno prevent breaking kvhostcrea...

Hanno authored 6 years ago

231)         if (strlen($item) > 255) {
232)             return false;
233)         }
234)     }
235)     if (strlen($input) > 2048) {
236)         return false;
bernd XSS/CSRF-Bugs behoben

bernd authored 17 years ago

237)     }
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

238)     return (preg_match('/^[ A-Za-z0-9.@\/_-]*$/', $input) == 1);
bernd XSS/CSRF-Bugs behoben

bernd authored 17 years ago

239) }
240) 
241) 
bernd * alle internen Links sinnv...

bernd authored 15 years ago

242) function in_homedir($path)
243) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

244)     DEBUG("Prüfe »{$path}«");
245)     if (! check_path($path)) {
246)         DEBUG('Kein Pfad');
247)         return false;
248)     }
249)     if (! isset($_SESSION['userinfo']['homedir'])) {
250)         DEBUG("Kann homedir nicht ermitteln");
251)         return false;
252)     }
Bernd Wurst Syntaxfehler

Bernd Wurst authored 6 years ago

253)     return strncmp($_SESSION['userinfo']['homedir'], $path, strlen($_SESSION['userinfo']['homedir'])) == 0;
bernd * alle internen Links sinnv...

bernd authored 15 years ago

254) }
255) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

256) function check_date($input)
Bernd Wurst Erste Version des SEPA-Mand...

Bernd Wurst authored 11 years ago

257) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

258)     return (bool) preg_match("/[0-9]{4}-(0?[1-9]|10|11|12)-([012]?[0-9]|30|31)/", $input);
Bernd Wurst Erste Version des SEPA-Mand...

Bernd Wurst authored 11 years ago

259) }
260) 
bernd * alle internen Links sinnv...

bernd authored 15 years ago

261) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

262) function check_emailaddr($input)
bernd Neues Modul für "Kunde werden"

bernd authored 17 years ago

263) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

264)     return (bool) filter_var($input, FILTER_VALIDATE_EMAIL) == $input;
bernd don't be too complicated. /...

bernd authored 16 years ago

265) }
266) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

267) function check_domain($input)
bernd don't be too complicated. /...

bernd authored 16 years ago

268) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

269)     return (bool) preg_match("/^[a-z0-9\.\-]+\.[a-z\-]{2,63}$/i", $input);