Szybki gotowiec na ochronę przed SQL Injection w PHP
·115 words·1 min
blog.dsinf.net
php
zabezpieczenia
Kod krótki, ale jakże niezbędny.
Podstawowa wersja podmienia wszystkie zmienne przekazane przez GET i POST:foreach ($_GET as &$z)
$z = preg_replace('/[^a-zA-Z0-9_ \[\]\.\(\)\{\}\^\@\#\?\!.,&]/s', '', $z);
foreach ($_POST as &$z)
$z = preg_replace('/[^a-zA-Z0-9_ \[\]\.\(\)\{\}\^\@\#\?\!.,&-]/s', '', $z);
Regexa (pomiędzy ukośnikami) można dostroić do naszych potrzeb i pokusić się o ładną funkcję, która będzie zależna od typu danych - coś w rodzaju
function make_string_safe($string, $type){
$regex_inters = array (
'unsigned_int' => '0-9',
'float' => '0-9-,.',
'alphanum' => 'a-zA-Z0-9',
'safe_all' => 'a-zA-Z0-9_ \[\]\.\(\)\{\}\^\@\#\?\!.,&' /* bezpieczne dla zapytań SQL */
);
$used_regex_inter = $regex_inters[$type];
return preg_replace('/[^'.$used_regex_inter.']/s', '', $string);
}
Pewną modyfikacją byłoby zmienienie parametru $string
na &$string
i w ostatniej linii funkcji zmiana z return...
na $string=...
(przekazanie przez referencję).