Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mysqli + sql_injection
Forum PHP.pl > Forum > PHP
vadergb
Witam

Mam pewien dylemat. Robiac projekt chce zastosowac mysqli (ze wzgledu na szybkosc ).

Jednak nie ma jakiegos manuala do tej klasy. Z tego co sie orientuje nie ma on opcji takich jak PDO w ktorej podpinamy parametr i okreslamy go jako string albo int - a nawet jesli jest to wydluza on tylko prace naszego skryptu(spada wydajnosc)

jak sie najbardziej oplaca obronic przed sql_injection:
1. napisac wlasna funkcje ktora bedziemy uzywac przy kazdym $_GET i $_POST ktore dolacza do bazy.
przyklad
$_GET[zmienna]=napraw($_GET[zmienna],int);
$_GET[zmienna]=napraw($_GET[zmienna],string);
2. korzystac tylko z php i np przy stringach robic:
mysql_real_escape_string($_POST['zmienna']);
3. napisac do klasy mysqli dodatkowa funkcje ktora by robila to co w punkcie 1.

Jesli jest jakies lepsze wyjscie prosilbym o jego przedstawienie
Spawnm
//mysql_real_escape_string($_POST['zmienna']);
raczej mysqli_real_escape_string($_POST['zmienna']);

//Jednak nie ma jakiegos manuala do tej klasy.
http://pl.php.net/manual/pl/book.mysqli.php
daniel1302
Ja bym preferował rozwiązanie 3. Sam w modelu do frameworka tak będę robił(odpale filter)
vadergb
hmm w mysqli jest cos takiego:


  1. <?php
  2. $stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
  3. $stmt->bind_param('sssd', $code, $language, $official, $percent);
  4.  
  5. $code = 'DEU';
  6. $language = 'Bavarian';
  7. $official = "F";
  8. $percent = 11.2;
  9.  
  10. $stmt->execute();
  11. ?>


Z tego co sie orientuje funkcja prepare a potem execute jest duzo wolniejsza od zwyklego query (przy testah tez widac duzaaa roznice - szczegolnie przy select)... i zastanawiam sie czy oplaca sie z opcji bind_param korzystac? czy jak wspomnailem wczesniej zrobic swoja klase ktora przed query bedzie sprawdzala i ew. zamieniala $_POST i $_GET?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.