![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 24.12.2009 Ostrzeżenie: (20%) ![]() ![]() |
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 ![]() 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:
Sprawdzanie, w PHP: 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:
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:
Pozdrawiam, i liczę na Wasze rady i propozycje ![]() Ten post edytował arkos 11.02.2012, 19:07:30 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
1. przed wstawieniem danych do bazy użyj mysql_escape_string
2. przy pobieraniu danych z bazy filtruj wszystkie parametry (głównie te, które pobierasz z geta/posta), używając mysql_escape_string, rzutowania danych oraz ich walidacji 3. przy wyświetlaniu na stronie danych wpisanych przez użytkowników zawsze używaj htmlentities lub strip_tags, aby nikt nie wstrzyknął Ci swojego kodu javascript na stronę imho to są 3 najważniejsze sprawy, związane z bezpieczeństwem. w Twoim przypadku to "'`users` WHERE `login`="'.$login.'"'" jest potencjalnie niebezpieczne. wyobraź sobie że w $login masz wpisane Kod 1' OR 1='1
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 24.12.2009 Ostrzeżenie: (20%) ![]() ![]() |
ActivePlayer, z góry dzięki za odpowiedź.
Tak, oczywiście te aspekty znam. Wpisałem tak jak napisałeś: mojlogin_istniejacy_juz_w_bazie' OR 1='1 To zapytanie nie przejdzie ponieważ validator go nie przepuści, w powyższym formularzu, chyba że się mylę i działa to w inny sposób? Dodatkowo pisząc tutaj o javascript i wstrzyknięciu kodu nasuwa mi się już pewne zagadnienie. Przypuśćmy, że wyświetlę: Dodatkowo, w PHP, np. wyłączone jest dodawanie \ przed ' oraz " (czy przy włączonym uniemożliwi to, czy tylko utrudni?). Ktoś sobie "wstrzyknie" javascript. To się wyświetli u niego w przeglądarce tylko i wyłącznie, więc jaki to ma skutek? Przecież X użytkownikowi "wstrzyknięty" kod się nie wyświetli. Zresztą poco mu takie wstrzykiwanie, łatwiej użyć: Konsoli dla programistów, np. w Google Chrome. Mam jeszcze jedno pytanie, czy można podać dane, w jakiś inny sposób niż jako tekst, np. w GET? Np, w jakimś kodzie HEXowym, czy innym, wtedy "uniknie się" dodania back shlesh przed ' lub " co znacznie zwiększa niebezpieczeństwo? PS. Liczę również na odpowiedź na pytania zawarte w pierwszym poście. Ten post edytował arkos 11.02.2012, 18:43:46 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
W zależności jakich danych oczekuje, robie to tak:
dla stringa:
dla inta:
Na tym kończę pierwszy etap walidacji, kolejne etapy są zależne od tego w jaki sposób chce przetwarzać input. Może on np. trafić do bazy, albo do HTML'a. Ważne aby nie przesadzić, pozwolić aplikacji się po chichu wysypać zamiast obsesyjnie walidować pod każdym możliwym katem, bo to kosztuje. Ten post edytował wNogachSpisz 11.02.2012, 19:32:44 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 24.12.2009 Ostrzeżenie: (20%) ![]() ![]() |
Dzięki.
Czekam dalej na propozycje i odpowiedzi. ![]() Zadaję te pytania, ponieważ kiedyś ktoś koledze skopiował całą stronę (wraz z plikami .php i umieścił u siebie). A to nie było napewno zrobione przez FTP, a uploadu plików żadnego tam niemiał, a cały system był pisany autorsko, dodatkowo miał częste włamania do bazy. A portal niebył to jakiś pierwszy lepszy, tylko z dużą ilością unikalnych wejść. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 319 Pomógł: 118 Dołączył: 26.11.2003 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
(...) 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 ![]() 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:
-------------------- scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
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 ![]() Nie zrozumiałeś, a na domiar złego posłużyłeś się wynaturzonym przykładem. "Ciche wysypanie" to oczywiście uproszczenie, chodzi o to, że wiele systemów jak np. baza danych przeprowadzi własną walidację i często bardziej opłaca się "złapać" błąd zwrócony przez moduł który i sprawdzi dane o ile nie masz wpływu na to zachowanie. W przeciwnym razie aplikacja jest do dupy na wiele sposobów, nieproszony nie będę ich opisywał. Jeśli chodzi o int, może to nie jest świetne rozwiązanie, ale ja sam waliduję je w bardzo prosty sposób:
To za mało, gdy wartość nie jest zadeklarowana zwrócony zostanie ERROR_NOTICE, a do tego nie można dopuścić. Ten post edytował wNogachSpisz 12.02.2012, 00:36:10 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 24.12.2009 Ostrzeżenie: (20%) ![]() ![]() |
Ok, dzięki. Już się nauczyłem jak sprawdzać inita hehe
![]() Może jeszcze ktoś odpisać na moje inne pytania zadane powyżej. ![]() Mianowicie o: 1. Issecie, czy jest bezpieczne to, czy musze jeszcze filtrować jak tylko sprawdzam czy istnieje. 2. Czy moje sprawdzanie jest dobre pd względem wydajności. 3. Klasa/funkcja na uprawnienie sprawdzania jeżeli formularzy jest wiele. 4. Pytanie odnośnie \' oraz \" 5. Pytanie odnośnie innego systemu znaków 6. Pytanie o javascript Jeżeli chodzi o włamanie tego typu do bazy lub kradzież plików, to pytanie jak tego mógł dokonać, bo zapytaniem do bazy danych raczej nie... (kradzież plików). Pytam z aspektów czysto bezpieczeństwa i zabezpieczenia się przed tym, aby nie popełnić jakiś błędów aż takiego typu, a nie ze względów hakerskich. Wszystko to jest wyżej w postach napisane, a tutaj uzyskałem tak naprawdę odpowiedź na jedno pytanie. ![]() Udzieli ktoś odpowiedzi na moje pytania? Ten post edytował arkos 12.02.2012, 12:53:40 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
1. Nie rozumiem pytania.
2. To zależy. 3. Nie rozumiem pytania. 4. Powtórz pytanie. 5. Powtórz pytanie. 6. Powtórz pytanie. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 24.12.2009 Ostrzeżenie: (20%) ![]() ![]() |
Jak mam powtarzać, jak wszystko jest w pierwszym poście: http://forum.php.pl/index.php?showtopic=19...mp;#entry939257
oraz: http://forum.php.pl/index.php?showtopic=19...mp;#entry939268 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
Chętnie odpowiem na każde pytanie. Problem w tym że nie chce mi się ich odcedzać. Potem powiesz że nie o to Ci chodziło. Szkoda mojego czasu.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 24.12.2009 Ostrzeżenie: (20%) ![]() ![]() |
W takim razię napiszę je jeszcze raz:
1. Pytanie: Przycisk wysyłający formularz, i po którym jest sprawdzane w PHP, czy został wsyłany:
Sprawdzanie, w PHP: Czy taka metoda jest bezpieczna, jeżeli sprawdzam tylko isset, i nic ze zmienną później nie robię, to czy muszę ją filtrować, w jakiś sposób. 2. Pytanie: magic_quotes - w nowszej wersji ma zostać usunięty, więc muszę dodawać do wszystkich $_POST, $_GET - addslashes (oprócz np. jeżeli sprawdzam tylko isset, zależne od odpowiedzi na pierwsze pytanie)? 3. Pytanie: Czy można podać dane, w jakiś inny sposób niż jako tekst, np. w GET? Np, w jakimś kodzie HEXowym, czy innym, wtedy "uniknie się" dodania back shlesh przed ' lub " co znacznie zwiększa niebezpieczeństwo? 4. Pytanie: Ktoś sobie "wstrzyknie" javascript. To się wyświetli u niego w przeglądarce tylko i wyłącznie, więc jaki to ma skutek? Przecież X użytkownikowi "wstrzyknięty" kod się nie wyświetli. Zresztą poco mu takie wstrzykiwanie, łatwiej użyć: Konsoli dla programistów, np. w Google Chrome. 5. Pytanie: Jeżeli chodzi o włamanie do bazy lub kradzież plików, to pytanie jak tego mógł dokonać, bo zapytaniem do bazy danych raczej nie... (kradzież plików). Pytam z aspektów czysto bezpieczeństwa i zabezpieczenia się przed tym, aby nie popełnić jakiś błędów aż takiego typu, a nie ze względów hakerskich. 6. Pytanie: Jakie proponujecie najlepsze rozwiązanie, jeżeli dałbym możliwość edycji plików html, php z poziomu strony. Chodzi mi tutaj o wyświetlanie kodu do edycji oraz dodawanie kodu do bazy. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
1. W tej zmiennej może być wszystko, np. tablica z potężną ilością elementów lub wielka tablica wielowymiarowa. Mogą tam się znaleźć dowolne dane binarne, albo pusty ciąg znaków. O ile nie masz zamiaru używać danych z $_POST[‘register’] oraz masz pewność ze nigdzie w skrypcie nie użyjesz niezadeklarowanej zmiennej $register (patrz register_globals vuln). To powinieneś być bezpieczny. 2. Po co dodawać addslashes? Ja robie dokładnie w druga stronę, odwracam zniszczenia jakie poczynia magic_quotes jeśli jest włączone:
Wychodze z założenia, że chce mieć dane dokładnie w takiej formie w jakiej zostały wysłane przez użytkownika, sam decyduje jak trzeba się z nimi obejść, nie pozostawiam tego ustawieniom php.ini. 3. Nie rozumiem, rozwiń. 4. Może mieć różne przykre konsekwencje, może podesłać adres takiej strony komuś kto ma na Twojej stronie konto i je przejąć. 5. To zależy na jakich uprawnieniach działa baza, jeśli na root to można tworzyć pliki zapytaniem. Zabezpiecz się przez SQL injection np. używając ActiveRecords. 6. To na prawdę zależy, musiałbyś przedstawić wszystkie założenia projektu. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 24.12.2009 Ostrzeżenie: (20%) ![]() ![]() |
Nie rozumiem odpowiedzi na 4 pytanie.
Jeżeli on wtrzyknie taki kod to wstrzyknie go tylko u siebie, przecież nie zapiszego go u mnie na serwerze - musiałby edytować pliki. |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
Jeśli wstrzyknie w URL, to może taki adres komuś podesłać i wykonać go w przeglądarce tego kogoś.
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 24.12.2009 Ostrzeżenie: (20%) ![]() ![]() |
Ok, to byłoby na tyle myślę.
Dzięki, jak coś mi się kiedyś przypomni, napiszę w tym temacie. Tak, wiem niezły odkop na forum. ![]() Czy w jakiś sposób (jeżeli chodzi o wynik końcowy) różni się wykonanie funkcji stripslashes_array przedstawionej przez wNogachSpisz (Post #14) od następującego zapisu?:
Dzięki za pomoc! |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
nie, a w zasadzie tamto było troche wymyślaniem koła na nowo.. tylko magic_quotes zniknęło już z PHP
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 24.12.2009 Ostrzeżenie: (20%) ![]() ![]() |
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
no tak, ale w specyfikacji masz określone, a od mq już dawno sie odchodziło, wiec rzadko to na serwerach było włączone.. a czasy addslashes już dawno przeminęły, poza tym teraz jest PDO i filtracja z jego poziomu w zupełności wystarcza..
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 09:20 |