Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Kilka pytań poczatkujacego - bezpiencztwo i wydajnosc
Forum PHP.pl > Forum > Przedszkole
gosciuuu
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. ?>


!*!
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.
gosciuuu
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.  
djgarsi
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.
gosciuuu
!*! - 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 ?
!*!
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.
djgarsi
Milion rekordów to mało, i jak zauważa !*!, powinieneś pomyśleć o optymalizacji, jednak dobra struktura to podstawa.
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.