Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Kilka pytań odnośnie bezpieczeństwa i filtracji danych.
arkos
post
Post #1





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 24.12.2009

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


Witajcie, mam kilka pytań odnośnie bezpieczeństwa, w PHP i filtracji danych.
Od razu powiem na wstępnie, że przeczytałem całą książkę: "PHP5 Bezpieczne programowanie J.Ross, wydawnictwa Helion", oraz wiele wiele stron poświęconych bezpieczeństwu. Ale kto pyta nie błądzi (IMG:style_emoticons/default/smile.gif)

A więc moje pierwsze pytanie, może trochę głupie no ale...:
Przycisk wysyłający formularz, i po którym jest sprawdzane w PHP, czy został wsyłany:
  1. <input type="submit" name="register" value="Zarejestruj się">

Sprawdzanie, w PHP:
  1. if(isset($_POST['register'])){ echo 'Akcje po wysłaniu'; }

Czy takie coś jest bezpieczne, czy w taki sposób ktoś może wstrzyknąć tutaj jakiś kod, czy muszę jeszcze jakoś zmienną $_POST['register'] filtrować?

Przy każdym wysyłaniu formularza sprawdzam dane, w taki sposób:
  1. $login = $_POST['login'];
  2. $pass = $_POST['pass'];
  3. $pass2 = $_POST['pass2'];
  4. if(!isset($login)) { info_blad('Podaj login'); }
  5. elseif(!preg_match('/^[0-9a-zA-Z_]*$/i', $login)){ info_blad('Błędne znaki w loginie!'); }
  6. elseif(strlen($login)<5) { info_blad('Podaj dłuższy login'); }
  7. elseif(strlen($login)>50) { info_blad('Podaj krótszy login'); }
  8. elseif(num_rows('`users` WHERE `login`="'.$login.'"') >= 1) { info_blad('Login jest zajęty); }
  9.  
  10. elseif(!isset($pass)) { info_blad('Podaj hasło'); }
  11. elseif(!preg_match('/^[0-9a-zA-Z!@#%^&*()-_=+,.]*$/i', $pass)){ info_blad('Błędne znaki w haśle'); }
  12. elseif(strlen($pass)<6) { info_blad('Podaj dłuższy login'); }
  13. elseif(strlen($pass)>50) { info_blad('Podaj krótszy login'); }
  14. elseif($pass!=$pass2) { info_blad('Hasła się nie zgadzają'); }
  15. ....
  16. else{ echo 'akcje po poprawnym sprawdzeniu danych, dodanie do bazy'; }

Czy sprawdzanie takie jest zarówno bezpieczne jak i również optmalne pod względem wydajności, taki typ stosuję w każdym formularzu na stronie, a jest ich sporo.

A może napisać jakąś klasę do usprawnienia tego procesu, niestet z klasami niezabardzo daję sobie radę?
Tak, aby dane były sprawdzane, np. w taki sposób:
  1. $sprawdz = new post_sprawdz();
  2. $sprawdz_dane -> liczby = $_POST['numer_domu']; // komunikat o ew. błędzie
  3. $sprawdz_dane -> znaki_az = $_POST['imie']; // komunikat o ew. błędzie
  4. itd.
  5. // jeżeli wszystko się zgadza
  6. echo 'akcje dodania danych do bazy, np.';


Pozdrawiam, i liczę na Wasze rady i propozycje (IMG:style_emoticons/default/smile.gif)

Ten post edytował arkos 11.02.2012, 19:07:30
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Daimos
post
Post #2





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


Cytat(wNogachSpisz @ 11.02.2012, 19:31:46 ) *
(...) Ważne aby nie przesadzić, pozwolić aplikacji się po chichu wysypać zamiast obsesyjnie walidować pod każdym możliwym katem, bo to kosztuje.

No tutaj można by polemizować, lepiej dać się aplikacji po cichu wysypać? Powiedz to zleceniodawcy, który wpuści takich użytkowników do serwisu, że to ciche wysypanie nastąpi po 5min od wrzucenia produkcyjnej wersji (IMG:style_emoticons/default/wink.gif)
Co do walidacji, to zgadzam się, że wszystko zależy co z tymi danymi będzie ktoś tworzył. Jeśli chodzi o stringi wrzucane do bazy, wystarczy zadbać o odpowiednie quoty (w stringu i dookoła;) )
Jeśli chodzi o int, może to nie jest świetne rozwiązanie, ale ja sam waliduję je w bardzo prosty sposób:
  1. if(!$parametrInt = (int) $zmiennaZawierajacaPrzeslaneDane)
  2. {
  3. // blad, chyba że system obslugiwac ma wartosci 0, wtedy caly warunek można odpuścić i wystarczy samo castowanie
  4. }

Go to the top of the page
+Quote Post

Posty w temacie
- arkos   [PHP] Kilka pytań odnośnie bezpieczeństwa i filtracji danych.   11.02.2012, 18:06:06
- - ActivePlayer   1. przed wstawieniem danych do bazy użyj mysql_esc...   11.02.2012, 18:27:06
- - arkos   ActivePlayer, z góry dzięki za odpowiedź. Tak, oc...   11.02.2012, 18:36:09
- - wNogachSpisz   W zależności jakich danych oczekuje, robie to tak:...   11.02.2012, 19:31:46
- - arkos   Dzięki. Czekam dalej na propozycje i odpowiedzi. ...   11.02.2012, 22:48:09
- - Daimos   Cytat(wNogachSpisz @ 11.02.2012, 19:31...   11.02.2012, 22:55:49
- - wNogachSpisz   Cytat(Daimos @ 11.02.2012, 22:55:49 )...   12.02.2012, 00:34:12
- - wNogachSpisz   Cytat(desavil @ 12.02.2012, 12:38:50 ...   12.02.2012, 12:43:22
- - arkos   Ok, dzięki. Już się nauczyłem jak sprawdzać inita ...   15.02.2012, 16:19:33
- - wNogachSpisz   1. Nie rozumiem pytania. 2. To zależy. 3. Nie rozu...   15.02.2012, 16:21:46
- - arkos   Jak mam powtarzać, jak wszystko jest w pierwszym p...   15.02.2012, 16:23:28
- - wNogachSpisz   Chętnie odpowiem na każde pytanie. Problem w tym ż...   15.02.2012, 16:25:55
- - arkos   W takim razię napiszę je jeszcze raz: 1. Pytanie:...   15.02.2012, 16:41:07
- - wNogachSpisz   1. W tej zmiennej może być wszystko, np. tablica z...   15.02.2012, 16:57:27
- - arkos   Nie rozumiem odpowiedzi na 4 pytanie. Jeżeli on wt...   15.02.2012, 17:13:41
- - wNogachSpisz   Jeśli wstrzyknie w URL, to może taki adres komuś p...   15.02.2012, 17:24:43
- - arkos   Ok, to byłoby na tyle myślę. Dzięki, jak coś mi s...   27.04.2014, 17:57:05
- - com   nie, a w zasadzie tamto było troche wymyślaniem ko...   27.04.2014, 18:14:05
|- - arkos   Cytat(com @ 27.04.2014, 19:14:05 ) ni...   27.04.2014, 18:19:12
- - com   no tak, ale w specyfikacji masz określone, a od mq...   27.04.2014, 18:33:34


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: 11.10.2025 - 01:31