Skip to main content
  1. Posts/
  2. blog.dsinf.net/

Szybki gotowiec na ochronę przed SQL Injection w PHP

·115 words·1 min
blog.dsinf.net php zabezpieczenia
Daniel Skowroński
Author
Daniel Skowroński

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ę).