Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MSSQL]Filtrowanie zapytan do mssql
Forum PHP.pl > Forum > Przedszkole
Nh2003
Witam

Mam problem tego typu - mam stworzony obiekt do obslugi zapytan do bazy danych mssql. Najczesciej uzywana jest funkcja query(), ktora wykonuje podane do niej zapytanie.

Teraz pojawia sie problem - mam napisane bardzo duzo aplikacji w ktorych nie mam mozliwosci wprowadzic filtrowania pobieranych znakow. Potrzebowalbym filtrowac to co jest przekazywane do funkcji query(). Przedewszystkim chodzi mi o zablokowanie mozliwosci wstrzykniecia komend drop database, drop table, create table.

Zapytania ktore wedruja do tej funkcji maja rozna postac - raz jest to zwykly select, innym razem jest to select z joinem itp. Ogolnie zasada jest taka ze na raz przekazywana jest tylko jedna kwerenda.

Czy ktos ma jaki pomysl w jaki senswny sposob zabezpieczyc tak napisana klase?
kavka
Proponuję byś wkleił to co napisałeś do tej pory.
php1983
Może coś takiego pomoże:

  1. <?php
  2. class baza{
  3. function isSafe($sqlString){
  4. $unsafeMask=array(
  5. 'drop table',
  6. 'drop database'
  7. );
  8.  
  9. foreach($unsafeMask as $val){
  10. //stripos jest niewrazliwe na wielkość znakow
  11. if(stripos($sqlString, $val)){
  12. return false;
  13. }
  14. }
  15. //tu mozna jeszcze sprawdzac inne warunki
  16. return true;
  17. }
  18.  
  19. function query($sqlString){
  20.  
  21. if(!$this->isSafe($sqlString)) return false;
  22.  
  23. //...
  24.  
  25. mysql_query($sqlString);
  26.  
  27. //...
  28.  
  29. return true;
  30.  
  31.  
  32.  
  33. }
  34.  
  35. }
  36. ?>
kavka
http://www.php.rk.edu.pl/w/p/postgresql-i-php/

tu masz przykładową klasę - co prawda dla postgreSQL ale łatwo to zamienić
Nh2003
php1983 - no niestety, jest to rozwiazanie, ktore niezbyt mnie zadowala -wystarczy ze zapytanie bedzie mialo postac:

  1. SELECT * FROM TABLE WHERE komentarz = 'we have to block DROP DATABASE';


I juz sie nie wykona.

kavka - nie wkleje dokladnie bo nie mam teraz dostepu do kodu ale wyglada to +/- tak:
  1. <?php
  2. function query($sqlString){
  3. if (mysql_query($sqlString)) {
  4. return true;
  5. } else {
  6. return false;
  7. }
  8. ?>
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.