Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Kilka pytań poczatkujacego - bezpiencztwo i wydajnosc
gosciuuu
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.02.2013

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


Z góry chciałbym prosić o nie wysyłanie mnie do google czy manuala; zanim zdecydowałem się napisać tutaj przestudiowalem google i jednak nie znalazlem tego co chce; a czasem manual nie jest dla mnie wystarczajaco jasny.

PHP, MySQL znam dosc dobrze, natomiast nie mam dużego doświadczenia w (nazwijmy to) administracji. A konkretnie chodzi mi wydajnosc i bezpieczenstwo;


1. Pierwsze moje pytanie dotyczy baz dancyh, zastanawiam sie czy za duza liczba rows`ów w bazie (powiedzmy 10 kolumnowej po 50 znakow max) nie spowoduje czegoś złego. Tzn w skrócie mówiąc jaka liczba rowsow jest duza a jaka mala, co w sytuacji kiedy tych rowsow jest za duzo. Mam nadzieje ze mniej wiecej wiecie o co mi chodzi.


2. Druga sprawa to bezpieczeństwo, a dokladnie GET a jeszcze dokladniej link aktywacyjny konta np.: aktywacja.php?email=przyklad&numeraktywacyhny=75438508

Poniżej jest taki prsoty skrypt (nie caly bo jeszcze sprawdzenie aktywacji itd itp), lecz skrypt nie jest bezpieczny, czy moze ktos mi napisac jak najlepiej go zabezpieczyc przed injection i wszystkim innym ?


  1. <?php
  2.  
  3. $email = $GET["email"];
  4.  
  5. $kod = $GET["numeraktywacyhny"];
  6.  
  7. if(isset($email) && isset($kod)) {
  8.  
  9. $sprawdz = mysql_query("SELECT * FROM uzytkownicy WHERE email='$email' AND kod='$kod'");
  10.  
  11. if (mysql_num_rows($sprawdz) == 1) {
  12.  
  13. mysql_query("UPDATE uzytkownicy SET aktywacja = tak WHERE email = '$email'");
  14.  
  15. } else {
  16.  
  17. echo "LINK JEST NIEPRAWIDŁOWY";
  18.  
  19. }
  20.  
  21. }
  22.  
  23. ?>


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
!*!
post
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Użyj PDO z bindowaniem zamiast mysql_*
Link aktywacyjny dobry, sprawdzaj tylko że email to email, a liczba to liczba... Choć sam ograniczyłbym się do zwykłego hasha np. md5 w linku na bazie emaila.
Go to the top of the page
+Quote Post
gosciuuu
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.02.2013

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


Przyszło mi jeszcze do głowy żeby sprawdzic czy email jest faktycznie emailem a koc sklada sie tylko z cyfr:

  1.  
  2. <?php
  3.  
  4. $email = $GET["email"];
  5.  
  6. $kod = $GET["numer_aktywacyjny"];
  7.  
  8. if(isset($email) && isset($kod)) {
  9.  
  10. if(filter_var($email, FILTER_VALIDATE_EMAIL) && is_numeric($kod)) {
  11.  
  12. $sprawdz = mysql_query("SELECT * FROM users WHERE email='$email' AND kod='$kod'");
  13.  
  14. if (mysql_num_rows($sprawdz) == 1) {
  15.  
  16. mysql_query("UPDATE uzytkownicy SET aktywacja = tak WHERE email = '$email'");
  17.  
  18. } else {
  19.  
  20. echo "LINK JEST NIEPRAWIDŁOWY";
  21.  
  22. }
  23.  
  24. } else {
  25.  
  26. echo "DANE SĄ NIEPRAWIDŁOWE";
  27.  
  28. }
  29.  
  30. }
  31.  
  32. ?>
  33.  


Ten post edytował gosciuuu 17.02.2013, 12:59:59
Go to the top of the page
+Quote Post
djgarsi
post
Post #4





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

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


1. Jeśli stworzysz poprawną strukturę to nie będzie problemu przy dużej ilości "rowsów".
2. Koncepcja ok, jednak zabezpiecz odpowiednio ten skrypt: walidacja maila oraz numeru aktywacyjnego np. wyrażeniami regularnymi.
Go to the top of the page
+Quote Post
gosciuuu
post
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.02.2013

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


!*! - fakt, pomysl z samym zakodowanym mailem to dobry pomysl

Więc czy if(is_numeric($aktywacja)) { } bedzie dobrze ? Czy czymś jeszcze zabepieczyć, wyciagnanie z bazy danych lub uploadowanie ?

O PDO musze poczytać, nie wydaje się być to trudne, czy to chroni przed włamaniami injection ?

djgarsi - mowimy tu moze nawet o milionie rowsów, czy przy dobrej strukturze, nie bedzie problemow ?
Go to the top of the page
+Quote Post
!*!
post
Post #6





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Raczej is_int jak brać pod uwagę Twój przykład.
Nic Cie nie chroni przed niczym, PDO z bindowaniem jedynie zapobiega "wstrzykiwaniu", ale to nie zwalania Cie od walidacji.

Milion to dość mało, a sama struktura bazy to za mało, aby mówić że to jest dobre. Jak coś będzie stwarzać problemy to zaczynasz myśleć o optymalizacji, cache itd.
Go to the top of the page
+Quote Post
djgarsi
post
Post #7





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

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


Milion rekordów to mało, i jak zauważa !*!, powinieneś pomyśleć o optymalizacji, jednak dobra struktura to podstawa.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 16.09.2025 - 23:13