Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MSSQL]Filtrowanie zapytan do mssql
Nh2003
post
Post #1





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 3.10.2007

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
kavka
post
Post #2





Grupa: Zarejestrowani
Postów: 81
Pomógł: 2
Dołączył: 9.07.2008
Skąd: Zduńska Wola/Wrocław

Ostrzeżenie: (0%)
-----


Proponuję byś wkleił to co napisałeś do tej pory.
Go to the top of the page
+Quote Post
php1983
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 1
Dołączył: 3.08.2008
Skąd: Radom

Ostrzeżenie: (0%)
-----


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. ?>


--------------------
Anti-loyal: xp; ubuntu; c++; asm; php 5.2; mysql 5.1; apache 2.2; vs '08 con vs.php; Zend S.
Go to the top of the page
+Quote Post
kavka
post
Post #4





Grupa: Zarejestrowani
Postów: 81
Pomógł: 2
Dołączył: 9.07.2008
Skąd: Zduńska Wola/Wrocław

Ostrzeżenie: (0%)
-----


http://www.php.rk.edu.pl/w/p/postgresql-i-php/

tu masz przykładową klasę - co prawda dla postgreSQL ale łatwo to zamienić
Go to the top of the page
+Quote Post
Nh2003
post
Post #5





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 3.10.2007

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 03:00