Ik ben nu bezig met het verwerken van ingevulde gegevens van een webformulier.
Graag wil ik mogelijke hacks voorkomen aangezien sommige velden direct een MySQL-query ingaan.
Ik heb de FAQ gelezen en de ' \' '' \\' \\\' " \" "" \\" \\\" ` \` `` \\` \\\` -string succesvol uitgeprobeerd.
Alle waarden die met $_GET, $_POST en $_COOKIE binnenkomen gaan door de zelfde CheckString-functie heen en ziet er bijvoorbeeld zo uit:
Ik heb speciaal de functies zoals str_replace niet gebruikt omdat ik later in dit stuk gemakkelijk wijzigingen wil aanbrengen. Ik weet dat het eenvoudiger kan zoals foreach en andere functies, maar daar gaat het nu niet om.
Ben ik met deze functie tegen elk type invoer ingedekt ? Of zijn er nog manieren om toch door deze beveiliging heen te komen en eventueel mijn MySQL-queries te beïnvloeden ?
Graag wil ik mogelijke hacks voorkomen aangezien sommige velden direct een MySQL-query ingaan.
Ik heb de FAQ gelezen en de ' \' '' \\' \\\' " \" "" \\" \\\" ` \` `` \\` \\\` -string succesvol uitgeprobeerd.
Alle waarden die met $_GET, $_POST en $_COOKIE binnenkomen gaan door de zelfde CheckString-functie heen en ziet er bijvoorbeeld zo uit:
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
31
32
33
34
35
36
37
38
39
| define("CONVERTERROR","!ERROR!"); function CheckString($String) { $NewString = ""; $Error = 0; $Char = 0; if ( !get_magic_quotes_gpc() && !get_magic_quotes_runtime() ) $String = addslashes($String); if ( strlen($String) == 0 ) $NewString = CONVERTERROR; else { for ($Teller1 = 0; ( $Teller1 < strlen($String) && $Error == 0 ); $Teller1++) { $Char = ord ( substr ( $String, $Teller1, 1) ); if ( $Char == 32 || $Char == 45 || $Char == 46 || $Char == 64 || $Char == 95 || ( $Char >= 48 && $Char <= 57 ) || ( $Char >= 65 && $Char <= 90 ) || ( $Char >= 97 && $Char <= 122 ) ) { // Dus de karakters ' ', '-', '.', '@', '_' en reeksen 0 t/m 9, A t/m Z en a t/m z zijn toegestaan. $NewString = $NewString.substr ( $String, $Teller1, 1); } else { $Error = 1; $NewString = CONVERTERROR; } } } return $NewString; } // Hier is wordt dus de functie aangeroepen: $ResultaatWaarde = CONVERTERROR; if ( isset($_POST["StringField"]) ) $ResultaatWaarde = CheckString( $_POST["StringField"] ); // Als het resultaat CONVERTERROR bevat, zal de gebruiker een foutmelding krijgen. |
Ik heb speciaal de functies zoals str_replace niet gebruikt omdat ik later in dit stuk gemakkelijk wijzigingen wil aanbrengen. Ik weet dat het eenvoudiger kan zoals foreach en andere functies, maar daar gaat het nu niet om.
Ben ik met deze functie tegen elk type invoer ingedekt ? Of zijn er nog manieren om toch door deze beveiliging heen te komen en eventueel mijn MySQL-queries te beïnvloeden ?
Speel ook Balls Connect en Repeat