Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zabezpieczenie formularza do oceny
lol75
post 24.05.2013, 14:45:16
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 14.03.2011

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


Cześć
Moim celem jest stworzenie bezpiecznego formularza zbierającego dane osobowe. Zależy mi bardzo na bezpieczeństwie, ponieważ nie chcę, aby wyciekły nr PESEL, nr dowodu osobistego i inne dane.

Stronę buduję prawie całkowicie w HTMLu - pomyślałem bowiem, że skoro potrzebuję jedynie formularza otoczonego estetycznymi obrazkami i kilkoma zdaniami wprowadzenia, ze względów bezpieczeństwa nie ma sensu zaprzęgania jakiegoś CMSa.

Wysyłam więc do przeglądarki nieco obrazków i statycznych tekstów za pomocą tagów HTML.

Pośród tego wszystkiego zrobiłem jeden formularz w PHP, w którym stosuję kilka pół testowych oraz pól typu select (rozwijalnych list).

Następny skrypt odbiera te formularze (metodą POST) i:

1. Filtruje:
  1. $imie = $funkcjeObject->filtrujDaneZewnetrzne($_POST['imie']);

gdzie metoda filtrujDane wygląda następująco:
  1. public function filtrujDane($zmienna)
  2. {
  3. $zmiennaCleanTemp = htmlentities($zmienna, ENT_QUOTES, 'UTF-8');
  4. $zmiennaClean = strip_tags($zmiennaCleanTemp);
  5.  
  6. return $zmiennaClean;
  7. }


Czyli zmienna poddawana jest najpierw funkcji htmlentities a później strip_tags.

2. Następnie dane te porównywane są do wzorca jakiego się spodziewam.

W przypadku pól tekstowych:
  1. $clean = array( );
  2.  
  3. if(ctype_alnum($imie))
  4. {
  5. $clean['imie'] = $funkcjeObject->filtrujDaneZewnetrzne($_POST['imie']);
  6. }

czyli jeśli zmienna $imie pobrana z POST jest alfanumeryczna, wtedy jeszcze raz pobieram ją z POST i umieszczam w tablicy $clean. Będą w niej znajdować się czyste dane.

W przypadku pól select sprawdzam tak:
  1. switch ($kurs)
  2. {
  3. case 1:
  4. case 2:
  5. case 3:
  6. $clean['kurs'] = $funkcjeObject->filtrujDaneZewnetrzne($_POST['kurs']);
  7. }


Czyli jeśli otrzymam wartość 1, 2 lub 3 - jeszcze raz pobieram POSTem i ładuję do tablicy $clean.

Muszę teraz zapisać dane w bazie. W tym celu sprawdzam, czy długość zmiennych jest większa od 0 (czyli czy wypełniono wszystkie pola obowiązkowe) i formuje z tego instrukcję INSERT.

Zanim to jednak nastąpi, tuż przed umieszczeniem w bazie traktują je funkcją mysql_real_escape_string

  1. public function filtrujDaneDoWpisaniaDoBazy($zmienna)
  2. {
  3. $mysql = array();
  4.  
  5. $mysql['zmienna'] = mysql_real_escape_string($zmienna);
  6.  
  7. return $mysql['zmienna'];
  8. }

aby dodać znaki ucieczki do niebezpiecznych znaków.

Dodatkowo nie wyświetlam żadnych zmiennych przez echo, jedynie suche zdanie "Dziękujemy za rejestrację w naszym serwisie" (zdanie to jest w pełni statyczne).

Aha. Zrobiłem tak, że strona internetowa wrzuca dane do bazy tymczasowej i tylko do niej ma dostęp. Moderator uruchamiając aplikację do zarządzania danymi zostanie poinformowany o nowych klientach i jeśli wzrokowo będzie z nimi wszystko w porządku, jednym przyciskiem przeniesie je do bazy produkcyjnej.
Moderator nie jest niestety informatykiem.

Co sądzicie o takich zabezpieczeniach?

Ten post edytował lol75 24.05.2013, 15:01:13
Go to the top of the page
+Quote Post

Posty w temacie


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.07.2025 - 10:47