Ik ben mij ervan bewust dat $_SERVER['PHP_SELF'] verre van veilig is, maar omdat ik die var toch vaak gebruik besloot ik een functie te schrijven die dat ding schoonmaakt. Deze functie:
Een aantal testcases:
Lijkt dus allemaal goed te gaan. Maar mijn grote vraag is nu: Zie ik niet iets over het hoofd? Is mijn functie wel veilig?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| function currentURL() { $file = basename($_SERVER['PHP_SELF']); $path = dirname($_SERVER['PHP_SELF']); $pathInfo = $_SERVER['PATH_INFO']; $url = $path . "/" . $file; if(!empty($pathInfo)) { if($pathInfo == "/") { $length = mb_strlen($url, 'UTF-8'); $url[$length] = ""; } else { if(substr($pathInfo, -1) == "/") { $url .= "/"; } $cleanURL = str_replace($pathInfo, "", $url, $count); if($count > 1) { $length = mb_strpos($url, $pathInfo, 0, 'UTF-8'); $start = mb_strlen($url, 'UTF-8') - $length - mb_strlen($pathInfo, 'UTF-8'); $workURL = mb_substr($url, -$start, $start, 'UTF-8'); $workURL = str_replace($pathInfo, "", $workURL); $url = mb_substr($url, 0, $length) . $pathInfo . $workURL; } else { $url = $cleanURL; } } } $url = str_replace("index.php", "", $url); return $url; } |
Een aantal testcases:
code:
1
2
3
4
5
6
7
8
| URL: /data/index.php/?xldkf=3bla?z=3/bla Gecleand: /data/ URL: /data/index.php/data Gecleand: /data/ URL: /data/modules/test.php/bla/data Gecleand: /data/modules/test.php |
Lijkt dus allemaal goed te gaan. Maar mijn grote vraag is nu: Zie ik niet iets over het hoofd? Is mijn functie wel veilig?