![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 272 Pomógł: 9 Dołączył: 6.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Napisałem własne skrypty, działają i wgl, ale muszą zostać zabezpieczone. W związku z tym piszcie, czy napisałem w miarę ok, czy są rażące widoczne błędy, itp.
Plik logowanie.php
Czy wszystko robię ok ? Czy jest to odporne na SQJ injection ? Macie może jakieś sugestie ? Czy w pliku tylko dla zalogowanych w zupełności wystarczy:
Ten post edytował marian2299 17.08.2009, 00:34:12 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Najpierw sprawdź czy zmienne są w post a potem dopiero przeleć mysql_real_escape_string.
Dalej... polecam zainteresować się wyrażeniami regularnymi pcre |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 272 Pomógł: 9 Dołączył: 6.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
A czy `przelecenie mysql_real_escape_string` po pustych zmiennych może dać niepożądane skutki ?, if ($login != "" && $haslo != ""){ to po `przeleceniu` nie wystarczy ?
Co do tych wyrażeń, poczytam, ale jutro (ciężki dzień (IMG:style_emoticons/default/haha.gif) ). A ogólnie ten kod może być ? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj użyć funkcji na czymś co nie istnieje...
W dodatku umknęło mi, niedopuszczalne jest zapisywanie hasła w sesji. (nawet hashu) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 272 Pomógł: 9 Dołączył: 6.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Czyli zostawić id i login? Będzie działać wszystko?
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Czyli zostawić id i login? Będzie działać wszystko? Właściwie jeżeli nie będziesz wykorzystywał tych informacji to możesz zrobić po prostu:
I potem na podstronach sprawdzać:
Działać, będzie nawet w pierwotnej wersji, lecz pisałeś chyba z myślą o przebudowie... Jak wspomniałem, wyrażenia regularne i możesz odpuścić wtedy mysql_real_escape_string (na haśle możesz od razu usunąć bo i tak hashujesz) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 2 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Podpinając się pod ten temat (gdyż trochę się nim sugerowałem), chciałem zapytać o wskazówki odnośnie takiego prostego skryptu, który wysmażyłem. Plik login.php pobiera dane od formularza w pliku index.php i wygląda następująco:
Jeśli mogę prosić o jakąś opinię - jeśli coś jest źle, to jak poprawić? pozdrawiam Radek |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Co źle? A sam sprawdzić nie możesz? Audyt? Giełda ofert.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 2 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdzam i działa. Chodzi mi tylko o podpowiedź odnośnie "dobrych praktyk programistycznych", czy nie popełniłem jakiegoś "faux-pas" w kodzie. Napisałem przecież "jeśli coś jest źle", a nie "co jest źle" (IMG:style_emoticons/default/smile.gif)
Bardziej zależało mi na poradzie typu "to-czy-tamto można zrobić lepiej, wydajniej, tu niepotrzebnie np. duplikujesz dane". Ogółem działać działa i jestem z siebie zadowolony, że opanowałem ten temat. Tylko żeby nie popadać w samozachwyt wolę się upewnić, że czegoś nie pochrzaniłem (IMG:style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 112 Pomógł: 27 Dołączył: 24.08.2007 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
Mam takie uwagi do obu Panów (IMG:style_emoticons/default/smile.gif)
@radabus: Te if'y :
można zastąpić po prostu tym : efekt będzie ten sam, a przynajmniej jeden warunek mniej do sprawdzania - tym bardziej ze w przypadku niepoprawnych danych oba if'y kierowaly do pliku index.php. Ponadto - i to się tyczy do Was obu - walidacja danych (IMG:style_emoticons/default/exclamation.gif) WAŻNE jest założenie, że KAŻDE dane pochodzące z zewnątrz, a szczególnie GET, POST - są niebezpieczne ! Dlatego też (tak jak wcześniej proponował fifi209) - bez wyrażeń regularnych się nie obejdzie. @marian2299 - przeanalizuj sobie kod radabus'a. Bezpieczne logowanie powinno wyglądać właśnie tak jak on to zrobił - na podstawie loginu wyciągamy hasło z bazy i porównujemy z tym, które podano w formularzu. Niestety ale Twój kod nie jest bezpieczny pod względem SQL Injection. Wystarczy w polu gdzie podajesz login użytkownika wpisać: " ' OR 1=1 " lub coś podobnego i masz dostęp do systemu. Ten post edytował Suh 19.08.2009, 21:00:19 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 2 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ponadto - i to się tyczy do Was obu - walidacja danych (IMG:style_emoticons/default/exclamation.gif) WAŻNE jest założenie, że KAŻDE dane pochodzące z zewnątrz, a szczególnie GET, POST - są niebezpieczne ! Dlatego też (tak jak wcześniej proponował fifi209) - bez wyrażeń regularnych się nie obejdzie. @Suh: czyli samo nie wystarczy? Najpierw trzeba wyrażeniami regularnymi sprawdzić, czy string przypadkiem nie zawiera niedozwolonych znaków i dopiero wtedy puścić go do MySQLa? Dobrze rozumiem? Bo jeśli mysql_real_escape_string nie wystarcza, to albo ja coś źle rozumiem, albo manual wprowadza w błąd (IMG:style_emoticons/default/winksmiley.jpg) Jest tam przecież napisane, że... Cytat tak przygotowanego łańcucha można bezpiecznie użyc w funkcji mysql_query() Samo napisanie sprawdzenia wyrażenia regularnego dla prostego ciągu znaków jak nazwa użytkownika nie powinno być trudne (chociaż jeszcze w pełni tego nie opanowałem), ale w takim razie po co używać mysql_real_escape_string? Takie dublowanie roboty wtedy jest (IMG:style_emoticons/default/winksmiley.jpg) Ten post edytował radabus 19.08.2009, 22:42:23 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 127 Pomógł: 6 Dołączył: 26.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam, nie będę zaczynał nowego tematu bo pytanie trochę ma do tego tematu , otóż przy skrypcie logowania , jak sprawdzam potem czy są isset zmienne $_POST , potem czy nie są puste i pasują do wyrażenia regularnego(preg_match) , potem w skrypcie ta metoda mysql_real_escape_string, to czy to mi da dosyć bezpieczny skrypt logowania ?
Ten post edytował kamillo121 19.08.2009, 22:59:02 |
|
|
![]()
Post
#13
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Przeczytaj przyklejony wątek o bezpieczeństwie, dopiero potem pytaj... :X
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 127 Pomógł: 6 Dołączył: 26.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Przeczytaj przyklejony wątek o bezpieczeństwie, dopiero potem pytaj... :X Przeczytałem, i pytam (pytanie poprzednie ) Bo nie znalazłem odpowiedzi na moje pytanie (IMG:style_emoticons/default/sadsmiley02.gif) ... |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 112 Pomógł: 27 Dołączył: 24.08.2007 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
Lepiej zrobić o jedno zabezpieczenie więcej, niż mniej.. Na pewno to nie zaszkodzi, a może co najwyżej poprawić sytuację.
Poza tym mysql_real_escape_string() może Ci co najwyżej sprawdzić czy nie ma w podanym ciągu takich znaków jak np. ' " czy coś podobnego. A wyrażenia regularne mogą ponadto np. sprawdzać czy w loginie nie ma cyfr lub podkreśleń czy innych takich znaków, których sobie po prostu nie życzysz. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 06:09 |