Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Optymalizacja i bezpieczeństwo zapytań
vegeta
post
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

Ostrzeżenie: (10%)
X----


Można jakoś zoptymalizować te zapytania? Byłbym wdzięczny za podanie błędów, które mogą zaszkodzić bezpieczeństwu bazy.

  1. $zarejestrowani = "SELECT COUNT(id) FROM `users`";
  2. $zarej = mysql_fetch_array(mysql_query($zarejestrowani));
  3. $online = "SELECT COUNT(active) FROM `users` WHERE active='1' and last_action > ".(time() - 900)."";
  4. $active = mysql_fetch_array(mysql_query($online));
  5. $ostatni = "SELECT `login` FROM `users` ORDER BY `id` DESC LIMIT 1";
  6. $ost = mysql_fetch_array(mysql_query($ostatni));
  7. $mostactive = "SELECT `mostactive` FROM `inne` WHERE `id`='1'";
  8. $mostact = mysql_fetch_array(mysql_query($mostactive));


Wyniki wyświetlam później np.
Kod
Online: '.$active['COUNT(active)'].'<br />


Ten post edytował vegeta 2.12.2010, 00:38:47
Go to the top of the page
+Quote Post
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Przecież nie wstawiasz tutaj żadnych zmiennych do zapytania.

Po co ten temat? To tak jakbyś zapytał jaka jest szansa, że szary kowalski wyniesie Twój sejf z 15cm tytanowymi ściankami i go rozwali. ;p


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #3





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Nie, tylko jedna mała uwaga: intów nie dawaj w żadne apostrofy/cudzysłowy, nie trzeba. I używaj apostrofów zamiast cudzysłowów w PHP gdy nie korzystasz z wstawiania zmiennych bezpośrednio w treści tekstu.
Go to the top of the page
+Quote Post
mmica
post
Post #4





Grupa: Zarejestrowani
Postów: 60
Pomógł: 20
Dołączył: 30.11.2010
Skąd: 127.0.0.1

Ostrzeżenie: (10%)
X----


Przefiltruj, escapuj etc., a najlepiej przejdź na OOP i skorzystaj z PDO i preparowania zapytań. Z PDO masz mniej rzeczy na głowie i możesz spać spokojnie wiedząc, że wszystko jest w porządku i niczego nie zapomniałeś przefiltrować pod kątem niepożądanego kodu. Ale nie masz co się martwić jeżeli nie wstawiasz zmiennych do zapytania winksmiley.jpg

@Mephistofeles: Widzę, że są dwie różne szkoły. Jedni radzą zawsze używać apostrofów, a inni wręcz przeciwnie. Czy brak apostrofów nie ułatwia czasami sql injection? Możliwe, że coś pomieszałem, a jeżeli tak się stało niech mnie ktoś oświeci. W samym SQL nie używać, bo nie ma po co, ale obsługa bazy przez PHP to już inna baja, nie? (biorę pod uwagę, że w tym kodzie ma to małe znaczenie [statyczne zapytania], ale przeczyta to ktoś dopiero zaczynający zabawę z PHP i będzie buble pisał, a nie kod..)

Pozdrawiam,
mmica


--------------------
"Imagination is more important than knowledge, because knowledge is limited." ~Albert Einstein
<?php $var = array('foo', 'bar'); ?>
Go to the top of the page
+Quote Post
vegeta
post
Post #5





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

Ostrzeżenie: (10%)
X----


Ok. A da się jakoś połączyć te zapytania, aby było ich mniej?
Go to the top of the page
+Quote Post
Fifi209
post
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Cytat(mmica @ 2.12.2010, 16:06:00 ) *
Przefiltruj, escapuj etc.,

Popatrz na kod i odpowiedz mi na pytanie: Co przefiltrować? Co escapować?
Cytat(mmica @ 2.12.2010, 16:06:00 ) *
a najlepiej przejdź na OOP i skorzystaj z PDO i preparowania zapytań. Z PDO masz mniej rzeczy na głowie i możesz spać spokojnie wiedząc, że wszystko jest w porządku i niczego nie zapomniałeś przefiltrować pod kątem niepożądanego kodu.

A jak masz wykopać jedną małą dziurę to kupisz koparkę?
Cytat(mmica @ 2.12.2010, 16:06:00 ) *
Ale nie masz co się martwić jeżeli nie wstawiasz zmiennych do zapytania winksmiley.jpg

Więc po co piszesz o filtrowaniu i escapowaniu?

Cytat(mmica @ 2.12.2010, 16:06:00 ) *
Widzę, że są dwie różne szkoły. Jedni radzą zawsze używać apostrofów, a inni wręcz przeciwnie.

Wystarczy popatrzeć na wydajność.
Link!
Cytat(mmica @ 2.12.2010, 16:06:00 ) *
Czy brak apostrofów nie ułatwia czasami sql injection?

Jaką różnicę zrobi wpisanie np. jako username
' and 1=1 /*
" and 1=1 /*

Dla mnie żadną


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
mmica
post
Post #7





Grupa: Zarejestrowani
Postów: 60
Pomógł: 20
Dołączył: 30.11.2010
Skąd: 127.0.0.1

Ostrzeżenie: (10%)
X----


@fifi209: No nie trzeba od razu tak besztać. Po to istnieje to forum, aby rozmawiać i wyprowadzać z błędu. Kolega napisał:
Cytat
Byłbym wdzięczny za podanie błędów, które mogą zaszkodzić bezpieczeństwu bazy.
A ja odpowiedziałem co może mu się przytrafić i na co powinien uważać, tylko tyle.

A co do apostrofów: wyraziłem moją niepewność.

Cytat
Jaką różnicę zrobi wpisanie np. jako username
' and 1=1 /*
" and 1=1 /*

Dla mnie żadną

Tak, chyba trochę robi różnicę. Stringa trzeba zamknąć, a jeżeli wyescape'uje się ciąg podany jako argument zostaną wyescapowane wszystkie apostrofy, a zatem ciąg nie zostanie zamknięty i żaden OR ani nic podobnego nie zdziała, bo zostanie częścią stringa, prawda? Poza tym mowa była o int'ach i w tym przypadku bez podania apostrofów escapowanie nie pomogłoby. Chyba, że ja tutaj czegoś nie pojmuję.

Argument, który przemawia za PDO, to przenośność pomiędzy bazami danych. Możliwe, że w przyszłości będziemy musieli uruchomić ten skrypt na innym serwerze, na którym nie będzie MySQL tylko PostgreSQL i co wtedy? Będziemy przepisywać cały kod? Moim zdaniem lepiej pomyśleć o tym wcześniej niż później kląć pod nosem i rezerwować sobie godziny nerwów. Nie rozumiem też tego porównania do koparki. Za pomocą PDO wszystko miałoby zwięzłą i zrozumiałą formę. Mogłbym zrozumieć gdyby chodziło o jakąś zewnętrzną bibliotekę, którą trzeba dołączyć, ale PDO to standard..

Dzięki za ciekawy link! Muszę go później dokładniej przejrzeć.

Pozdrawiam,
mmica

Ten post edytował mmica 2.12.2010, 17:39:12


--------------------
"Imagination is more important than knowledge, because knowledge is limited." ~Albert Einstein
<?php $var = array('foo', 'bar'); ?>
Go to the top of the page
+Quote Post
Fifi209
post
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Przenośność swoją drogą ale pamiętaj nie wszystko będzie działało tak "hop siup" smile.gif To zupełnie inne bazy, inne silniki, niby standard SQL ale jest troszkę inaczej.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #9





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Chcąc zapewnić pełną przenośność lepiej użyć Doctrine (Propela).
Go to the top of the page
+Quote Post
vegeta
post
Post #10





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

Ostrzeżenie: (10%)
X----


Dobra, ale jak je zoptymalizować (zrobić z tych zapytań jak najmniejszą liczbę przy tym samym wyniku)?
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: 19.08.2025 - 07:47