Bezpieczeństwo skryptów PHP, Jak zabezpieczyć się przed włamaniem |
Bezpieczeństwo skryptów PHP, Jak zabezpieczyć się przed włamaniem |
27.09.2007, 13:11:06
Post
#101
|
|
Grupa: Zarejestrowani Postów: 1 568 Pomógł: 192 Dołączył: 7.03.2005 Skąd: Warszawa Ostrzeżenie: (0%) |
Poruszacie tutaj temat łączenia stron, a jak sie ma bezpieczeństwo co do wykonywania jakich zapytań lub wysyłania formularzy. Albo ochrona przed spam botami.
Jak pewnego razu boty zaatakowały moją stronę to, nie mogłem się od nich odpędzić. Tak więc dodałem tokena, ale i to nie pomogło w końcu pomyślałem że dodają skrypty przez jakiegoś exploita napisanego specjalnie dla mojej strony. No i w shoutboxie i katalogu stron zastosowałem funkcje eregi. Jeżeli w tekscie wystepuje słowo "url", lub "http" to wtedy odrzuca formularz. Myślę że to jest dobre rozwiązanie, bo wiele spambotów działa podobnie, zapełniają pola text podobnymi tekstami. -------------------- |
|
|
27.09.2007, 19:32:22
Post
#102
|
|
Grupa: Zarejestrowani Postów: 690 Pomógł: 81 Dołączył: 6.04.2005 Skąd: Szczecin Ostrzeżenie: (0%) |
co do plików => http://www.beldzio.com/bezpieczenstwo-dost...do-plikow.freez
co do spamu => http://www.beldzio.com/walka-ze-spambotami.freez -------------------- |
|
|
18.10.2007, 20:27:50
Post
#103
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 17.07.2007 Ostrzeżenie: (0%) |
Witam wszystkich ...
Temat bezpiecznego podpinania pików jest dość ciekawy i chyba rozwiązań jest tyle ile programistów. Ja stosuję takie rozwiązanie i chyba całkiem dobre, które jednocześnie spełnia rolę maskowania adresu (dobre jeśli jakiś serwer nie obsługuje mod-rewrite). adresy wyglądają tak: http://domena.pl/index.php?podstronka,1,jakieś_dane,kolejne,... oczywiście zamiast "," można dać dowolny inny znak Kod <?php 1. $katalog=array(1=>"nazwa_katalogu_jeden", "następna_nazwa_katalogu", ........); 2. if(eregi("^[a-zA-Z0-9,]+$",$_SERVER["QUERY_STRING"])) { 3. $adres = explode(',',$_SERVER["QUERY_STRING"]); 4. $plik_name = $adres[0]; 5. $katalog_name = $adres[1]; 6. $adres_name = $katalog_name.'/'.$plik_name.'.php'; 7. if ($plik_name<>''){ 8. if (file_exists( $adres_name)){ 9. require(" $adres_name'");} 10. else {require("strona_error.php");} 11. } 12. else {require("strona_error.php");} 13. } 14. else {require("strona_głowna.php");} ?> Na początek sprawdzam czy w url-u (po znaku"?") nie ma "zakazanych" znaków ... url może zawierać tylko małe i duże litery alfabetu bez polskich znaków, liczby 0-9 oraz "," ... pozostałe znaki są uznawane jako próba "włamania" Kolejny etap to tworzenie z " ?podstronka,1, jakieś_dane ,kolejne,... " tablicy o nazwie $adres. Przypisanie zmiennym $plik_name = $adres[0]; (nazwa pliku do podpięcia), $katalog_name = $adres[1]; (id katalogu z tablicy $katalog) i $adres_name (czyli gotowy adres do pliku). Teraz sprawdzam, czy zmienna z nazwą pliku zawiera jakieś dane(można to zrobić wcześniej ... rzecz gustu). W końcu sprawdzam, czy plik o takiej nazwie istnieje w danym katalogu. Jeśli tak to podpinam plik, a jeśli nie to podpinam podstronę z komunikatem błędu (z możliwością dopisania IP i nazwy przeglądarki usera do bazy i po np. 5 próbach wpisania błędnego adresu zablokowanie IP na określony czas) Kolejne numery, czyli: $adres[2], $adres[3], ... , $adres[X], to poprostu zmienne, które już są przefiltrowane i można bezpiecznie użyć ich w skryptach bez stosowania metody $_GET['zmienna']. Można jeszcze dodać sprawdzanie domeny, czy przypadkiem podstrona nie jest wywoływana z pod innego adresu niż adres naszego serwera. Jeśli ktoś ma pomysły na ulepszenie mojej wersji to bardzo proszę ... może wspólnie uda się stworzyć coś naprawdę dobrego Ten post edytował consto 18.10.2007, 22:15:04 |
|
|
27.10.2007, 23:59:19
Post
#104
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) |
czytalem juz ten temat kilka razy i teraz przeczytalem na nowo na php nie znam sie dobze bo robie duzo bledow ale duzo ludzi pisze ze taki kod jest bezpieczny
lecz wedlug mnie nie jest on bezpieczny poniewaz 1)nie sprawdzamy czy sa to cufry w przypadku id artu czy user'a lub czy sa tylko litery 2)jesli na servie magic_quotes = off to jest null byte poinson i w zaleznosci co sie uzylo czy include czy fopen 3)tu jest LFI. RFI nie ma bo sprawdzamy czy dany plik isnieje na serverze lecz juz cos takiego
jest bezpieczne jesli plik ktory includujemy jest przynajmniej 2 katalogi wyzej dobrze mowie czy nie??Ja i tak jestem zwolennikiem uzuwania switch'a lub if'ow :D -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
18.12.2007, 22:18:10
Post
#105
|
|
Grupa: Zarejestrowani Postów: 398 Pomógł: 0 Dołączył: 13.07.2005 Skąd: Lublin Ostrzeżenie: (0%) |
Pewnie, że to jest niebezpieczne. Wystarczy za zmienna id wstawić:
i już masz ciekawą sytuację -------------------- "Państwo to ja" Ludwik XIV
"Wróg zaatakuje to co kochasz" Ojciec Chrzestny "Wszystko powinno być proste jak to tylko możliwe, ale nie prostsze..." A. Einstein "Wyobraźnia jest ważniejsza niż wiedza" Albert Einstein "Nieprawda powtarzana wielokrotnie staje się prawdą" |
|
|
18.12.2007, 23:20:17
Post
#106
|
|
Grupa: Zarejestrowani Postów: 690 Pomógł: 81 Dołączył: 6.04.2005 Skąd: Szczecin Ostrzeżenie: (0%) |
@marcio check this http://www.beldzio.com/bezpieczenstwo-dost...do-plikow.freez
-------------------- |
|
|
26.02.2008, 12:18:17
Post
#107
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 9 Dołączył: 16.02.2004 Skąd: Kraków Ostrzeżenie: (0%) |
Chciałbym zwrócić uwagę na jedną rzecz związaną z zapisywaniem identyfikatora i praw dostępu użytkownika do sesji.
Często robi się tak, że po zalogowaniu użytkownika, dane takie jak jego ID oraz jego uprawnienia są zapisywane do sesji. Widziałem wiele razy takie rozwiązania. Przykładowo: Zalogowany user: "Kazek", ID=50, ma uprawnienia "administrator serwisu" Wszystko jest dobrze, tylko gdy np. szef firmy dowie się że Kazek właśnie siedzi w domu przy komputerze i chce ukraść wszystkie dane to nic nie może z tym zrobić. Gdy zmieni mu uprawnienia, zablokuje lub usunie konto, to dopóki Kazek jest zalogowany może robić co chce. Rozwiązanie jest oczywiście proste, tj zanim skrypty php cokolwiek zrobią, jakiś skrypt sprawdzający pobiera z bazy danych informacje o zalogowanym użytkowniku. Sprawdza czy taki user istnieje, czy nie ma zablokowanego konta oraz jaki ma poziom. W wypadku gdy coś się nie zgadza, blokuje dostęp do wszystkiego i kasuje sesje. W tym wypadku jedyne co trzeba zapisać do sesji to ID usera bo reszta jest i tak pobierana z bazy. Poprawcie mnie jeżeli się mylę. -------------------- Wszystko należy robić najprościej jak się da, ale nie prościej
Albert Einstein |
|
|
26.02.2008, 12:22:11
Post
#108
|
|
Grupa: Zarejestrowani Postów: 461 Pomógł: 32 Dołączył: 17.09.2003 Skąd: Łódź Ostrzeżenie: (0%) |
Na tym polega odpowiednie zaprogramowanie autentykacji (uwierzytelniania) i autoryzacji.
Chociaż wiele osób o tym zapomina Do tego dobrze jest zawsze sesje mieć przechowywane w bazie danych - dzięki temu zawsze można wymusić akcję na zalogowanej osobie pozdr. |
|
|
26.02.2008, 12:33:51
Post
#109
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) |
Wrzucenie uprawnień do sesji ma na celu dwie rzeczy:
1. Możliwość wyświetlania opcji zależnych od uprawnień wymaga informacji o wszystkich uprawnieniach użytkownika; 2. Pobieranie drzewa uprawnień podczas każdego żądania byłoby bez sensu. Jeśli chodzi natomiast o reakcję na zmianę uprawnień dla użytkownika, którego sesja właśnie trwa to nie ma żadnego problemu. Kwestią jest to że przed każdą operację powinno sprawdzać się szczegółową funkcję, która właśnie jest używana. Przykładowo: Jeśli komuś wyświetlił się przycisk usuń to nie znaczy, że coś się usunie po kliknięciu weń. |
|
|
26.02.2008, 13:09:40
Post
#110
|
|
Grupa: Zarejestrowani Postów: 461 Pomógł: 32 Dołączył: 17.09.2003 Skąd: Łódź Ostrzeżenie: (0%) |
Rozwijając moją poprzednią wypowiedź:
Sesje trzymam w bazie, oprócz standardowych kolumn: SID, Dane, Czas ... mam kolumny: Uzytkownik_ID, Odswiez ... Gdy użytkownik traci dostęp zmieniam Uzytkownik_ID na wartosc 0 ... a gdy tylko zmieniam uprawnienia to Odswiez przyjmuje wartosc true ... i przy następnym przejściu odświeżam wszystkie dane typu tego gdzie Odśwież jest na true Jak do tej pory nie miałem problemów z tym, że kogoś wyciąłem a on dalej grzebał mi pozdr. |
|
|
8.03.2008, 15:36:36
Post
#111
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) |
2. Pobieranie drzewa uprawnień podczas każdego żądania byłoby bez sensu. Dlatego przy każdym otworzeniu strony można by było sprawdzić datę ostatniej modyfikacji i porównać z sesją. Czas działania skryptu jest na tyle mały, że nie ma sensu przy wywoływaniu każdej czynności sprawdzać. Oczywiście można też zrzucić na bazę logowanie, a wtedy przy zmianie danych automatycznie by się odnowiły dane o poziomie dostępu, tylko byśmy pobierali te już raz "sklejone" dane. Mimo wszystko duża część stron nie wymaga takiego zabezpieczenia, bo jak z praw dostępu korzysta jedna osoba, to nie ma sensu sprawdzanie ich po zalogowaniu, nikt ich nie odbierze. -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
8.03.2008, 19:57:03
Post
#112
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) |
Ja uprawnienia pobieram tylko podczas logowania, natomiast przed każdym wywołaniem akcji, kontroler (wykorzystuje do tego napisaną klasę ACL) sprawdza czy użytkownik może daną akcję wywołać. Automatycznie też sprawdzane jest, czy maksymalny czas nieaktywności nie został przekroczony (za to odpowiada handler sesji) - jeśli tak, user zostaje przekierowany na stronę logowania.
Pozdrawiam -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
20.03.2008, 11:31:19
Post
#113
|
|
Grupa: Zarejestrowani Postów: 382 Pomógł: 22 Dołączył: 21.05.2007 Skąd: Elbląg Ostrzeżenie: (0%) |
Może wrócę do bezpieczeństwa bezpośredniego...
Oto kod zebezpieczający przed wieloma atakami... nalezy go umieścić przed wszystkimi innymi skryptami...
|
|
|
20.03.2008, 13:49:52
Post
#114
|
|
Grupa: Zarejestrowani Postów: 690 Pomógł: 81 Dołączył: 6.04.2005 Skąd: Szczecin Ostrzeżenie: (0%) |
-------------------- |
|
|
20.03.2008, 13:55:00
Post
#115
|
|
Grupa: Zarejestrowani Postów: 382 Pomógł: 22 Dołączył: 21.05.2007 Skąd: Elbląg Ostrzeżenie: (0%) |
Wszystkimi dotyczącymi formularzy, ciastek, SQL icjection etc.
a ten zabezpiecza przed Session Fixation i Session Hijacking Kod if (!isset($_SESSION['inicjuj']))
{ session_regenerate_id(); $_SESSION['inicjuj'] = true; $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; } if($_SESSION['ip'] !== $_SERVER['REMOTE_ADDR']) { die('Proba przejecia sesji udaremniona!'); } |
|
|
20.03.2008, 14:33:59
Post
#116
|
|
Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) |
@MajareQ, poczytaj trochę więcej o bezpieczeństwie, a potem dopiero nas uraczaj cudownymi uniwersalnymi skryptami zabezpieczającymi, ok?
co do drugiego skryptu, wyobraź sobie sytuacje, w której jesteśmy w tej samej sieci lokalnej (na zewnątrz mamy to samo IP), rozpoczyam sesję i daję ci linka. zapobiegłeś session fixation? (nie mówiąc o tym, że ograniczyłeś dostęp ludziom, których ip może się zmieniać w czasie połączenia). -------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
20.03.2008, 16:29:23
Post
#117
|
|
Grupa: Przyjaciele php.pl Postów: 2 712 Pomógł: 23 Dołączył: 27.10.2003 Skąd: z kontowni Ostrzeżenie: (0%) |
W tym temacie wszystko zostało już powiedziane. W kwestiach bezpieczeństwa taka sytuacja nie istnieje. Co jakiś czas pojawiają się nowe ataki i nowe metody zapobiegania im. Mam propozycje dla moderatora aby usunął te kilka ostatnich postów aby nie robił się burdel w tym topicu. pzdr Mam propozycję dla osób z zacięciem moderatorskim; powstrzymajcie się od takich postów. Zamiast tego używajcie odpowiedniego przycisku, w celu zgłoszenia moderatorom jakiegoś nadużycia. Adwersarzy proszę o jedynie wypowiedzi merytoryczne, bez osobistych "przytyczek". -------------------- "Coś się kończy, coś się zaczyna." Andrzej Sapkowski
|
|
|
20.03.2008, 17:22:07
Post
#118
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) |
W kwestiach bezpieczeństwa taka sytuacja nie istnieje. Co jakiś czas pojawiają się nowe ataki i nowe metody zapobiegania im. Zgadza się, ale kolega nie napisał nic co ni byłoby już poruszane na tym forum. Poza tym odbieram jego posta jako próbę wymuszenia oceny jego "rozwiązania", a w tym celu mógł napisać nowego posta z prośbą o ocenę a nie klepać w przyklejonym temacie. Teaty przyklejone powinny zawierać konkretne informacje a nie dyskusje ciągnące się na x-stron (chyba że są to ciekawe i przydatne informacje). Mam propozycję dla osób z zacięciem moderatorskim; powstrzymajcie się od takich postów. Zamiast tego używajcie odpowiedniego przycisku, w celu zgłoszenia moderatorom jakiegoś nadużycia. Oprócz tego użyłem przycisku "Raportuj", prosiłem o usunięcie kliku ostatnich postów - w tym także mojego. pzdr -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
21.03.2008, 19:55:05
Post
#119
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 1 Dołączył: 29.06.2007 Ostrzeżenie: (0%) |
strip_tags(); htmlspecialchars(); zaobserwowałem, że zastosowanie funkcji striptags powoduje nieprawidłowe działanie dla plików zawierających na przykład jakieś matematyczne wyliczenia i znaki mniejszości i większkości, wywalane są nie tylko znaczniki HTML ale również tekst; nie wiem tylko czy jest to błąd konkretnej wersji php czy też ogólnie złe działanie funkcji |
|
|
21.03.2008, 20:37:51
Post
#120
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) |
@cool_solar
Raczej brak zrozumienia działania funkcji. Pomyśl poczytaj, a znajdziesz odpowiedź. -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
Wersja Lo-Fi | Aktualny czas: 22.06.2024 - 23:39 |