Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zabezpieczenie zapytań, klasa
DonJeday
post 3.11.2008, 17:36:41
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Mam problem ponieważ napisałem klasę wszystko ok, ale nie mam pojecia jak dodać np. addslashes?

Oto klasa:

  1. <?php
  2.  
  3. class SQL
  4. {
  5. public $db_host;
  6. public $db_user;
  7. public $db_name;
  8. public $db_pass;
  9.  
  10.  public function __construct($db_host, $db_user, $db_name, $db_pass)
  11.  {
  12.      $this->db_host = $db_host;
  13.      $this->db_user = $db_user;
  14.      $this->db_name = $db_name;
  15.      $this->db_pass = $db_pass;
  16.  }
  17.  
  18.  public function connect()
  19.  {
  20.      $this->connect = mysql_connect($this->db_host, $this->db_user, $this->db_pass)
  21.      or die ("Nie można połączyć z bazą danych!");
  22.  
  23.      mysql_select_db($this->db_name, $this->connect);
  24.  }
  25.  
  26.  public function query($query)
  27.  {
  28.      $this->query = $query;
  29.      $this->result = mysql_query($this->query);
  30.  }
  31.  
  32.  public function closeSQL()
  33.  {
  34.      mysql_close($this->connect);
  35.  }
  36.  
  37. }
  38. ?>





kombinowałem tak żeby w tej lini:

  1. <?php
  2. $this->query = $query;
  3. ?>


dodać addslashes tak:

  1. <?php
  2. $this->query = addslashes($query);
  3. ?>


ale nie działa...



Jak to rozwiązać, żeby zapytanie automatycznie było zabezpieczone, żebym nie musiał rozkminiać podczas pisania aplikacji o zabezpieczeniu.

Ten post edytował DonJeday 3.11.2008, 17:53:47


--------------------
Go to the top of the page
+Quote Post
bartg
post 3.11.2008, 18:07:50
Post #2





Grupa: Zarejestrowani
Postów: 225
Pomógł: 25
Dołączył: 4.07.2007
Skąd: Berlin

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


Moja klasa (przypasowana w frameworka):
http://phpfi.com/373319

Jednak nadal można podejrzeć parę rzeczy. Np metody Insert i Update

PS. Nie wiem czy transakcje tam dzialają więc się na nich nie wzoruj

EDIT; Zauważyłem, że jest tam jeszcze assignInt itp., ale to już dawno zostało wyrzucone z kodu ze względu na niewygode pisania zapytań.

Ten post edytował bartg 3.11.2008, 18:10:34


--------------------
Go to the top of the page
+Quote Post
empathon
post 3.11.2008, 18:09:00
Post #3





Grupa: Zarejestrowani
Postów: 246
Pomógł: 31
Dołączył: 13.11.2006
Skąd: się znamy?

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


I powiedź mi po co powielasz funkcjonalność już obecną w php? http://pl2.php.net/mysqli
albo jeszcze lepiej: http://pl2.php.net/pdo


--------------------
Goldenline: Łukasz Rodziewicz
Go to the top of the page
+Quote Post
DonJeday
post 3.11.2008, 18:14:54
Post #4





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Bo się uczę programowania obiektowego, wale te pro funkcje...
Powiedzcie mi jak to zabezpieczyć... a nie zastąpić wbudowanymi funkcjami / klasami...


--------------------
Go to the top of the page
+Quote Post
empathon
post 3.11.2008, 19:18:37
Post #5





Grupa: Zarejestrowani
Postów: 246
Pomógł: 31
Dołączył: 13.11.2006
Skąd: się znamy?

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


Cytat(DonJeday @ 3.11.2008, 18:14:54 ) *
Bo się uczę programowania obiektowego, wale te pro funkcje...
Powiedzcie mi jak to zabezpieczyć... a nie zastąpić wbudowanymi funkcjami / klasami...

Oj tak nie będziemy rozmawiać.
To co narazie robisz ma niewiele wspólnego z OOP ale wątpię żeby ktoś w odpowiedzi na ton żądaniowy udzielił Ci pomocy... powodzenia.


--------------------
Goldenline: Łukasz Rodziewicz
Go to the top of the page
+Quote Post
mike
post 3.11.2008, 20:03:10
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Przenoszę z Programowanie obiektowe na PHP
Go to the top of the page
+Quote Post
DonJeday
post 3.11.2008, 21:07:10
Post #7





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


empathon, z tego co się orientuję to do PDO potrzebny jest sterownik, którego mój serwer nie posiada...


--------------------
Go to the top of the page
+Quote Post
bełdzio
post 3.11.2008, 21:11:44
Post #8





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


1. dodaj kolejna funkcje ktorej zadaniem bedzie "zabezpieczenie zmiennej"
2. addslashes służy do czego innego, poczytaj o mysql_real_escape_string


--------------------
Go to the top of the page
+Quote Post
DonJeday
post 3.11.2008, 21:29:35
Post #9





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Cytat(bełdzio @ 3.11.2008, 21:11:44 ) *
1. dodaj kolejna funkcje ktorej zadaniem bedzie "zabezpieczenie zmiennej"
2. addslashes służy do czego innego, poczytaj o mysql_real_escape_string

1. Właśnie o tym myslałem;


2. mysql_real_escape_string używam do zabezpieczania pól z formularzy czyli danych wchodzących do zapytania, może nie opłaca się zabezpieczyć klasy skoro używam mysql_real_escape_string?
robiłem to tak:
  1. <?php
  2. $login_sec = mysql_real_escape_string($_POST[login], $connect);
  3. ?>

i potem $login_sec wrzucałem do zapytania smile.gif

Ten post edytował DonJeday 3.11.2008, 21:34:54


--------------------
Go to the top of the page
+Quote Post
bełdzio
post 3.11.2008, 22:18:11
Post #10





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


skoro robisz klase do zabawy z SQL to w niej powinno byc zabezpieczanie, bo jesli teoretycznie zmienisz sterownik z mySQL na np Postrge to bedziesz musial zmienic poza klasa dodatkowo pliki aplikacji smile.gif


--------------------
Go to the top of the page
+Quote Post
pp-layouts
post 3.11.2008, 22:21:54
Post #11





Grupa: Zarejestrowani
Postów: 53
Pomógł: 1
Dołączył: 28.09.2007
Skąd: Gdynia

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


PDO ma swoje minusy (wydaje mi się, że nie ma wszystkich typowych dla MySQL opcji).

Ale może niedobrze uczyć się kododawania MySQL-specific? Heh, w takim układzie, w ogóle czemu PHP, są inne języki, nie będę pokazywał palcem...

Ale używanie MySQL bez MySQLi ? Bezcelowe.

MySQLi ma swoje ograniczenia, i owszem, ale jeśli już coś rozszerzać, to właśnie MySQLi aż się prosi o rozszerzenie. Oczywiście bez sensu dopisywać do niego już istniejącą funkcjonalność, ale są ciekawsze sposoby rozszerzania. Mój lib na przykład implementuje interfejs Countable i Iterator, co pozwala na całkiem przyjemne posługiwanie się zapytaniami w kodzie:

foreach (db::$cc->query('select * from my_table') as $n => $record) { ... }

Ale do takiego skrótu potrzebna jest opcja, w jakiej postaci mają być zwracane rzędy wyniku, u mnie defaultowo zwraca jako obiekty, ale można przełączyć na coś innego.

Co do zabezpieczania, to oczywiście mysqli::real_escape_string(). Podobno prawidłowe działanie tej funkcji wymaga ustawienia locale:

@setlocale('LC_ALL', 'pl_PL.UTF-8');

Jeśli oczywiście używasz UTF-8. Jeśli czegoś innego, ustawiasz na coś innego.

Żeby nie musieć PAMIĘTAĆ o escapowaniu każdego stringa zapodawanego do zapytania, w kodzie inicjującym swoją aplikację zrobiłem escapowanie tablic $_GET, $_POST i $_REQUEST. Tak na wszelki wypadek. Działa. Po włączeniu tego injecty do bazy już mi nie przechodziły smile.gif

O co jeszcze rozszerzam MySQLi? Na przykład poprawiam buga w odczycie wartości pól bitowych. Jeśli sprawdzisz je na true albo false to się zdziwisz. Nie zawierają nawet 0 ani 1. Próba "podglądnięcia" co takiego zwraca php dla takich pól zwróci dziwne rzeczy. A tak na prawdę to chr(0) i chr(1). "Bez sęsu", prawda? smile.gif

Co jeszcze się przydaje? Lepsza obsługa wartości typu set i enum, funkcje kopiowania i przenoszenia tabel, tworzenia widoków, importowania i eksportowania danych... Ale nie będę wklejał kodu, toż to sama przyjemność sobie to napisać smile.gif

A co do tematu zabezpieczania, niech Ci tylko do głowy nie strzeli sprawdzać każdego zapytania przed wysłaniem! TO JEST ZŁE, bo po co sprawdzać coś za każdym wywołaniem funkcji, co może być sprawdzone JEDNORAZOWO, przy uruchomieniu.
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 Wersja Lo-Fi Aktualny czas: 25.04.2024 - 02:49