Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Zabezpieczenie formularzy
itsme
post 7.03.2003, 13:18:26
Post #1





Grupa: Zarząd
Postów: 1 512
Pomógł: 2
Dołączył: 22.04.2002
Skąd: Koszalin




Witam,

Jestem ciekawy Waszych doświadczeń i sposobów zabezpieczania formularzy przed niebezpiecznymi wpisami (zaznaczam ze nie chodzi mi o to jak zrobić aby cyferek nie wpisać).

Moje doświadczenie w tym zakresie jest znikome zaś literatura w tym zakresie też jest skromna.


--------------------
brak sygnaturki rowniez jest sygnaturką
Go to the top of the page
+Quote Post
dragossani
post 7.03.2003, 16:32:37
Post #2





Grupa: Przyjaciele php.pl
Postów: 398
Pomógł: 0
Dołączył: --
Skąd: Poznań

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


Skoro już temat znalazł się na php pro to proponuję go poszerzyć o ogólne zasady związane z bezpieczeństwem aplikacji. Sądzę, że ktoś rozwinie temat. Na początek kilka uwag:

Instalacja php - należy zwracać uwagę na opcje mające kluczowy wpływ na bezpieczeństwo działania serwera. php jako moduł CGI jest bardziej podatne na ataki niż skompilowane statycznie z Apache'm (niestety kompilacja statyczna jest mało elastyczna). Jeśli już php kompilujemy jako CGI to musimy dabć by były włączone flagi takie jak --enable-force-cgi-redirect - chyba, że chcemy aby ktoś nam grzebał w katalogach do których teoretycznie zabezpieczyliśmy dostęp przez .htaccess (szczegóły w książce PHP4 Aplikacje).
Pliki - wszystko co nie jest zwykłym HTML'em lepiej trzymać poza głównym drzewem Apache'a. Nigdy nie wiemy czy nie zostanie odkryta dziura w Apache'u, przez którą będzie można dostać się do udostępnianego katalogu?
Skrypty - wszystkie dane z zewnątrz (GET, POST, COOKIE <- też) należy traktować jako podejrzane. Nie zakładajmy, że ktoś po prostu kliknął na naszej stronie link i parametry, które otrzymujemy pochodzą właśnie stamtąd. Ktoś może napisać własny skrypt i walić nam dane POST'em takie jakie mu się tylko przyśnią. Każdy może zmienić zmienną i dostać się do strony, która jest nie dla niego, jeśli mu na to pozwolimy. Dlatego wszystko należy przefiltrowywać (wydaje mi się, że widziałem kiedyś na Zend'zie skrypt kontrolujący, czy zmienne przekazywane pomiędzy naszymi stronami nie zostały zmodyfikowane - test sumą kontrolną, czy czymś w tym rodzaju), a jeżeli zmienna wpływa na dostęp do plików to MUSIMY zadbać o to, żeby nikt nam nie zmieniał ścieżek dostępu (vide funkcja basename()) i nie wydawał poleceń systemowych (vide EscapeShellCmd()). O użyciu exec() już nawet nie wspominam.
Sprawa o której mało kto pamięta: długość zmiennych - lepiej to kontrolować, bo każdy bufor da się przepełnić, a DenialOfService to nie najprzyjemniejsza sytuacja.
Następna sprawa: register_globals=off to dobry nawyk. Co prawda sesji nic nie grozi ale już zmienne środowiskowe da się nadpisać (variables_order=EnviromentGetPostCookieSession). Jak mamy Off to wszystko jest pod kontrolą i w dodatku wyrabiają się nam dobre nawyki programistyczne.
Jeśli zabieramy się za szyfrowanie to róbmy to z głową - funkcje typu MD5 albo biblioteka MCrypt to dobre rozwiązanie, a własna twórczość niekiedy nie.
Próbując zydentyfikować użytkownika albo cokolwiek innego, lepiej nie używać cechy, którą da się manipulować, ani takiej, która nie jest unikalna (np. numer IP). Dla osób unikalny jest PESEL, dla firm REGON (a nie NIP), a np. dla pojazdów VIN (a nie numer rejestracyjny).
Jeśli przez sieć wędrują hasła albo tajne informacje to MUSIMY je szyfrować - najprościej przez SSL. Lepiej męczyć się przez SSL bez wykupienia certyfikatu (uciążliwe komunikaty) niż olać całą sprawę. Sniffer'a może użyć każda lama.
Jeśli można, to zrzucamy do logów wszystko co się da. Można i należy samodzielnie logować wszystkie posunięcia userów w naszym serwisie - opłaci się to, gdy trzeba będzie zidentyfikować problem.
Na koniec taki detal: komunikaty o błędach lepiej przechwytywać i nie walić userom na ekrany, bo usterka może się trafić każdemu, a dla włamywacza informacja typu: 'brak praw dostępu do katalogu cośtam/cośtam/' albo 'Postgres: syntax error in bleble' są bardzo cenne.


--------------------
cease this long, long rest / wake and risk a foul weakness to live / when it all comes down / watch the smoke and bury the past again / sit and think what will come / raise your fears and cast them all away
Go to the top of the page
+Quote Post
Seth
post 8.03.2003, 19:55:13
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Zabezpieczajac dany skrypt itp. musimy tez pamietac, ze jezeli znamy sposob jak go obejsc napewno predzej czy pozniej ktos tez go znajdzie. Najlepiej udostepnic newralgiczny kod zaufanym osobom, ktore przetestuja jego slabe punkty.

Nastepna sprawa jest funkcja printf() oraz sprintf(), ktore sa narazone na tzw blad ciagu formatujacego. Uzywajac tych funkcji w polaczeniu z danymi przeslanymi z zewnatrz moga powodowac bledy w naszych aplikacjach i umozliwic atak na nasza aplikacje.

Podczas tworzenia aplikacji bazujacych na uprawnieniach usytkownikow musimy stosowac zasade najmniejszego przywileju. Nie powinnismy odrazu nadawac uzytkownikowi najwyzszych praw, a zaczac od podstawowych w celu unikniecia dostepu przez niepowolane osoby do waznych danych.

Dane konfiguracyjne powinismy trzymac w zabezpieczonych katalogach albo w plikach, ktore nie dadza sie podejzec.

Zmienne globalne sa kolejnym 'miejscem' narazonym na atak, wiec powinnismy tak konstruowac skrypty aby nie mozna bylo w latwy sposob podmienic danych globalnych (najlepiej wlaczyc register_globals na off).

Polecam jeszcze ten link do skryptow, ktore moga nam sie przydac w zabaezpieczeniu naszych aplikacji: http://www.zend.com/codex.php?CID=246
Go to the top of the page
+Quote Post
mazy
post 30.03.2003, 19:20:28
Post #4





Grupa: Zarejestrowani
Postów: 69
Pomógł: 4
Dołączył: 12.03.2003
Skąd: Suwałki

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


Niema po co wpadać w oanikę, ale zawsze należy spodziewć się najgorszego sad.gif . z pośród 100 odwiedzających zawsze znajdzie sie jeden który będzie chciał coś popsuć.

Zwracam tagże uwagę na "zabezpieczenie" sie przed "lamerami" którzy np. rejstrują sie, otrzymyjąc jakieś tam prawa a potem wypisują jakieś przekleństwa albo inne głupoty(chyba nie zboczyłem z tematu).
Go to the top of the page
+Quote Post
freyman
post 21.05.2003, 11:19:11
Post #5





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 21.05.2003

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


Na idiotów jest prosty sposób - zrobić bardzo rygorystyczną rejestrację. Ja np. rozdzieliłem serwis na dostępny dla ludzi "zaufanych" i "czekających na zaufanie". Ci pierwsi rejestrowali się z pełną weryfikacją swoich danych personalnych.

Potem nowi ludzie moga się rejestrować automatycznie, ale nie mają dostępu do opcji, w których mogą zrobić coś głupiego. Jeżeli nie nawywijaj nic przez miesiąc, to dostają dodatkowe prawa.

Jeżeli ktoś będzie czekał miesiąc, żeby nawrzucać fucków, to na takiego już nic się nie poradzi.
Go to the top of the page
+Quote Post
puklos
post 21.05.2003, 20:35:00
Post #6





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: --
Skąd: Kraków

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


Dodałbym jeszcze bardzo staranną walidację danych (zarówno client-side jak i później server-side) w celu uniknięcia pułapek typu SQL injection czy Cross site scripting. php samo z siebie pomaga przez magic_qoutes ale sprawdzić nie zawadzi. A co do sprawdzania u klienta i na serwerze to na serwerze trzeba sprawdzać, bo JS można wyłączyć i w ten sposób probować przesłać jakieś sfabrykowane dane, a u klienta też warto sprawdzać, bo to oszczędza czas i nie wymaga przesyłania danych do serwera.


--------------------
Puklos
Go to the top of the page
+Quote Post
halfik
post 26.05.2003, 13:26:43
Post #7





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

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


Jezeli chodzi o formularze rejestracyjne to dobe wydaja mi sie metody z ktorejs z sieci komorkowych, numer z przepisaniem z obrazka cyfr etc.

w bezpieczenstwie mozna tez wykozystac mechanizm sesji.
Go to the top of the page
+Quote Post
Pianandrill
post 2.06.2003, 18:47:23
Post #8





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 21.04.2003

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


Może powinienem to umieścić w osobnym wątku ale tutaj to też chyba pasuje...
Problem sklepu interentowego:
1. Do jakiego stopnia i w jaki sposób kontrolować userów kożystających z zamówień przez internet
2. Jak przekazywać między stronami wartość loginu (to czy user jest zalogowany) zakładając ze strona działa na zasadzie include i czy przekazywanie przez cookie jest bezpieczne - w końcu to tez da się od biedy podmienić. Czy za każdym wejsciem na stronę sprawdzac przekazany w cookie login (ew. tez hasło) czy jest zgodne z zawartością bazy?
3. W jakiś sposób można kontrolować skąd dane przyłażą (z jakiej strony) i na tej podstawie validować je, ale jak?
Go to the top of the page
+Quote Post
spenalzo
post 2.06.2003, 22:01:13
Post #9





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


1. Sprawdzać poprawność danych i weryfikować email poprzez wysłanie emaila kontrolnego a potem telefonicznie. Im więcej "zabezpieczeń" tym mniejsza przychylność użytkowników.
2. Jest opcja zapisania cookie przez SSL - nie wiem jak to działa w praktyce. Możesz jeszcze z sesji skorzystać, ale nie jestem pewien bo dopiero poznaje mechanizmy sesyjne.
3. Tablice post, get, cookie, server, session - o to chodzi?


--------------------

Go to the top of the page
+Quote Post
halfik
post 4.06.2003, 17:01:38
Post #10





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

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


//1. Do jakiego stopnia i w jaki sposób kontrolować userów kożystających z zamówień przez internet

Im wiecej informacji o urzytkownikach tym na wiecej mozna im pozwlic, i tym latwiej pozniej znalezc winowajce jakby co... tongue.gif np. pobieranie IP usera, gdy wchodzi na witryne, wysyla formularz i takie tam...

//2. Jak przekazywać między stronami wartość loginu (to czy user jest zalogowany) zakładając ze strona działa na zasadzie include i czy przekazywanie przez cookie jest bezpieczne - w końcu to tez da się od biedy podmienić. Czy za każdym wejsciem na stronę sprawdzac przekazany w cookie login (ew. tez hasło) czy jest zgodne z zawartością bazy?

bron boze nei przechowuj w cookie hasel! login - mozna, ale haslo i login nie! jesli chodzi o hasla i loginy, to dobrze jest uzyc sesji, bo wowczas w cookie na kompie uzytkownika przychowujesz tylko SID, a to nie jest juz az tak grozne...

//3. W jakiś sposób można kontrolować skąd dane przyłażą (z jakiej strony) i na tej podstawie validować je, ale jak?

nie wiem, ale moze chodzi Ci o HTTP_ENV_VARS["HTTP_REFERER"] i
HTTP_ENV_VARS["REDIRECT_URI"] ?
Go to the top of the page
+Quote Post
Wankster
post 4.06.2003, 20:47:47
Post #11





Grupa: Zarejestrowani
Postów: 208
Pomógł: 0
Dołączył: 19.04.2003

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


//2.//halfik:
Ja po zalogowaniu wysyłam 3 ciacha:
1. Zakodowane przez md5 i base64_encode hasło
2. Zakodowany przez base64_encode login
3. Zakodowane przez base64_encode ID użytkownika

A później sprawdzam w bazie winksmiley.jpg
Go to the top of the page
+Quote Post
halfik
post 5.06.2003, 14:28:34
Post #12





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

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


Wankster: ale mi nie o to chodzilo. Co Ci da kodowanie jesli ktos dobrzierze sie userowi do cookie: wie z jakiej to strony i ma zakodowane haslo i login, ktore przeciez Twoje skrypty lykna z utesknieniem. Generalnie - uwazam ze nie powinno sie przychowywac nic waznego w cookie.

btw. po zahashowaniu loginu i hasla, zapisujesz je do bazy, ew. do pliku. a pozniej sprawdzasz dane z cookie z danymi zapisanymi w bazie/pliku ?
Go to the top of the page
+Quote Post
LeWaR
post 5.06.2003, 14:46:55
Post #13





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 22.04.2002
Skąd: Szubin

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


Ja w sesji ustawiam czy klient jest zalogowany czy nie, bo przecież hasło i login podaje na etapie logowania.
Dopóki sesji nie straci to może sobie łazić gdzie mu sie podoba (w zakresie serwisu).

Tak więc kto jest kto sprawdzam na etapie logowania, a reszte trzyma sesja smile.gif
Go to the top of the page
+Quote Post
kwiateek
post 5.06.2003, 14:53:42
Post #14





Grupa: Zarejestrowani
Postów: 223
Pomógł: 0
Dołączył: 13.01.2003
Skąd: 3rd ball of mud behind a big ball of burning gas

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


Cytat
//2.//halfik:
Ja po zalogowaniu wysyłam 3 ciacha:
1. Zakodowane przez md5 i base64_encode hasło
2. Zakodowany przez base64_encode login
3. Zakodowane przez base64_encode ID użytkownika

:arrow: A jesli user ma wylaczona olusge ciastek to przy tylko takim zalozeniu skrypt nie bedzie dzialac?
:arrow: Po co wysylac przy tego typu weryfikacji ID usera skoro login tak czy inaczej musi byc unikalny?


--------------------
It's Time to Join the PLD Linux Generation!
<? while (!$success) { $try++; } ?>
Go to the top of the page
+Quote Post
halfik
post 5.06.2003, 18:14:29
Post #15





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

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


LeWaR: ale w tym momencie latwo jest dostac sie do serwisu. po drugie, tym sposobem nie zrobisz, aby kazdy user mial swoje konto z mozliwosciami integorawania w niktore czesci strony oraz by kazdy uzytkownik mogl otrzymywac, tracic pewne uprawnienia.
Go to the top of the page
+Quote Post
DeyV
post 5.06.2003, 18:41:44
Post #16





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Jeżeli dane mają być przechowywane tylko na czas sesji, to znacznie bezpieczniejszym sposobem jest trzymanie ich w ... sesji. Tam nie będą mogły być przechwycone.
Natomiast jeśli jest konieczne ciastko...
Można zapisać 3 wartości:
a = zahaszowane (numer IP), (na przykład)
b = zakodowany login,
c = zahaszowana (a + cool.gif

A sprawedzenie tego?
Po pierwsze - test czy a + b ?= c
Po drugie - czy md5($ip) ?= a

Jeśli tak - przechodzimy do wyciagania numeru Ip


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
LeWaR
post 6.06.2003, 08:20:34
Post #17





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 22.04.2002
Skąd: Szubin

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


Cytat
ale w tym momencie latwo jest dostac sie do serwisu.

podpowiesz jak? przyda mi się smile.gif
Cytat
tym sposobem nie zrobisz, aby kazdy user mial swoje konto z mozliwosciami integorawania w niktore czesci strony oraz by kazdy uzytkownik mogl otrzymywac, tracic pewne uprawnienia.

to akurat nie jest mi potrzebne. w moim serwisie nie nadaje żadnych uprawnień. Skrypt ma sprawdzać czy ktoś jest zalogowany i pokazać mu jedne dane, natomiast osobnik nie zalogowany obejrzy sobie inne dane.

Pozdrawiam
Go to the top of the page
+Quote Post
Pianandrill
post 7.06.2003, 09:50:10
Post #18





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 21.04.2003

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


Dzięki za odpowiedź

oczywiście ze haseł nie przechowuje się w cookie - tak jakoś walnąłem smile.gif

1) Jeszcze propos kontroli loginu i hasła.
Jezeli strona jest zrobiona na zasadzie przekazywania zmiennych przez adres i includowania odpowiednich stron z wskazanymi zmiennymi to czy w takim przypadku po zmianie strony (po każdym kliknięciu) kontrolować czy user jest zalogowany i sprawdzać czy login jest w bazie?

2) Czy zachowywać cookie na dłużej niż czas przebywania na stronie?
czy usuwać po rozłączeniu ze stroną i wymuszać logowanie przy każdym odwiedzeniu strony. A moze lepiej logować tylko w momencie składania zamówienia, albo w formularzu zamówienia pytac to login i haslo?

3) czy wykorzytanie sesji rozwiązuje problem wyłączonych cookie u uzytownika?

4) "nie wiem, ale moze chodzi Ci o HTTP_ENV_VARS["HTTP_REFERER"] i
HTTP_ENV_VARS["REDIRECT_URI"] ?"

czy takim czymś można sprawdzić czy formularz został wysłany z mojej stronki czy czasem ktoś sobie nie zrobił własnego i tylko action=http//bla.bla/index.php nie ustawił?
Go to the top of the page
+Quote Post
halfik
post 9.06.2003, 06:17:51
Post #19





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

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


ad 1. wg. mnie tak, jesli chesz odrobine zwiekszyc bezpieczenstwo serwisu, ale mozesz tez np. jak niektorzy - raz sprawdzaja a pozniej zapisuja w zmiennej sesyjne 1 zeminna ktora okresla ze user jest zalogowany.

ad 2. ja proponuje ten 1 system, jak wiemy dziala on na wielu serwisach i jakos nikt nie nazeka, a te drugi coz- bylby nawet troszke nowatorski tongue.gif

ad 3. no i to jest ten bol tongue.gif

ad 4. przy pomocy zmiennych srodowiskowych mozna sprawdzic skad pochodzi zapytanie o strone i woczas na nie odpowiedziec - jesli to nasz skrypt - lub nie.
Go to the top of the page
+Quote Post
spenalzo
post 9.06.2003, 21:42:17
Post #20





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Cytat
ad 3. no i to jest ten bol tongue.gif

Jak to? Nie wiem czy dobrze zrozumiałem książkę, ale jeżeli php nie może zapisać cookie to przekazuje ID sesji w linkach. Więc odpada problem z wyłączonymi cookie.


--------------------

Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 9.07.2025 - 03:37