Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Zabezpieczenie formularzy
itsme
post
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.
Go to the top of the page
+Quote Post
dragossani
post
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.
Go to the top of the page
+Quote Post
Seth
post
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
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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
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.
Go to the top of the page
+Quote Post
halfik
post
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
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
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
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... (IMG:http://forum.php.pl/style_emoticons/default/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
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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
halfik
post
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
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kwiateek
post
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?
Go to the top of the page
+Quote Post
halfik
post
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
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 + (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
LeWaR
post
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ę (IMG:http://forum.php.pl/style_emoticons/default/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
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

ad 3. no i to jest ten bol (IMG:http://forum.php.pl/style_emoticons/default/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
Post #20





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

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


Cytat

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
halfik
post
Post #21





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

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


spenalzo: php jak tako samo nie ustawia SID przy linkach, no chyba ze masz tak skonfigurowane, bo chyba sie tak da. ja np. mailem takie konto ze sam musialem dodawac SID do linkow i szczerze mowiac toszke to uciazliwe, ale z drugiej strony mozemy gwizdac na to jak user ma skonfigurowana lub nie, przegladarke (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Pianandrill
post
Post #22





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

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


Gdzieś się pojawił pomysł z sprawdzaniem IP - a co jak ktoś ma dynamiczne??

Przechowywanie samego loginu w cookie jest wygodne, acz również niebezpieczne. Natomiast przecchowywanie hasla i id jest raczej zbytkiem - w koncu jezeli ktos sie juz dobierze do cookie to i tak powyciąga z nigo co mu trzeba. Hashowanie tez jest dobrym pomyslem, ale nadal pozostaje problem przechowywania tych danych i przekazywania ich między userami.

halfik: dlaczego TYM sposobem nie zrobisz żeby user mógł ingerować w stronę? przeciez na czas przechowywania sid ma prawa dostepu do strony.

Stały login (pozostawiany po rozłączeniu ze stroną) jest często bardzo przydatny. Moze być uciązliwe jezeli user musi korzystać ze strony co jakiś czas i za każdym razem się logować.

na pewnym forum (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) jest zachowywany login i jakoś to działa.
poza tym czy próby przełamania zabezpieczen są az tak częste?
Go to the top of the page
+Quote Post
FiDO
post
Post #23





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Cytat
na pewnym forum (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) jest zachowywany login i jakoś to działa.

Sam login bez hasla niewiele daje.
Cytat
poza tym czy próby przełamania zabezpieczen są az tak częste?

Dopoki nie trafi na Ciebie bedziesz myslal, ze nie.
Pozatym lepiej dmuchac na zimne w tych sprawach.
Go to the top of the page
+Quote Post
halfik
post
Post #24





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

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


Pianandrill: "TYM sposobem..." pisz prosze bez polslowek, bo ja nie znam watku na pamiec i nie pamietam co napisalem wczesniej, a na modemie nie bardzo mam czas zeby zalookac...

a IP to tez dobra rzecz, zwlaszcza w polaczeniu z cookie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Pianandrill
post
Post #25





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

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


Myslalem nad przechowywaniem id w cookie i sprawdzaniu przy każdym wejsciu czy dany id wystepuje w bazie - jezeli tak to ok, bo mozna zalozyc ze odwiedzajacym jest ten kto posiada aktualny login - jezeli to nie on to oznacza ze nie dopilnowal przejecia danych.
login!=id - takie jest zalozenie oczywiscie
Zaklada to także ze na kazdej stronie trzeba przeprowadzic sprawdzenie.
Ale można to ominąć poprzez pozostawienie na czas połączenia ze stroną cookie zawierające zmienną 1 lub 0, której wartość jest nadawana przy kontroli loginu. Jezli juz byl sprawdzany to jest 1 inaczej 0 - wyklucza to koniecznosc łączenia się za każdym przeładowaniem strony z bazą w poszukiwaniu loginu.

Co o tym sądziecie i czy macie jakieś zastrzeżenia do tego?
Go to the top of the page
+Quote Post
squid
post
Post #26





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


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

co do literatury to prosze bardzo : ftp://ftp.helion.pl/online/phpbb/phpbb-9.pdf, dzieki uprzejmosci helion caly darmowy rozdzial poswiecony tylko i wylacznie formularzom w php, choc nie ma tam wszystkiego to jest sporo, polecam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
squid
post
Post #27





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


Cytat
Gdzieś się pojawił pomysł z sprawdzaniem IP - a co jak ktoś ma dynamiczne??

Jesli uzywamy ip do kontroli podczas uzywania serwisu to zdaje mi sie ze nic nie stoi na przeszkodzie aby wykozystac rwoniez dynamiczne ip poniewaz jest ono unikalne dla danej sesji i podczas trwania sesi nie zmienia sie, oczywiscie jako wartosc wysciowa ip bowinna byc wzieta wartosc ip podczas logowania a nie podczas rejstracji. Takie moje skormne zdanie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Omega
post
Post #28





Grupa: Zarejestrowani
Postów: 273
Pomógł: 0
Dołączył: 5.05.2003
Skąd: Mazury

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


Niektórzy uważają że najprostsze metody są najlepsze... Podstawowa sprawa to pożądna kontrola wprowadzany danych, dalej strip_tags() lub HTMLSpecialChars().

Najefektywniejsza metoda to sprawdzanie zgłoszeń wysłanych na mail, ale to też najbardziej czasochłonna metoda... (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
halfik
post
Post #29





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

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


Cytat
Myslalem nad przechowywaniem id w cookie i sprawdzaniu przy każdym wejsciu czy dany id wystepuje w bazie - jezeli tak to ok, bo mozna zalozyc ze odwiedzajacym jest ten kto posiada aktualny login - jezeli to nie on to oznacza ze nie dopilnowal przejecia danych.


hmm... ale dlaczego chcesz przechowywac jakis id w cookie? przeciez uznawanie ze uzytkownik X jest zalogowany jedynie na podstawie id jest co najmniej bezcelowe. a co jak taki uzytkownik wezmie i przestawi sobie to id, dajmy na to z 1 zrobi sobie 4 - bo nei wiem czy dobrze rozumuje Twoj pomysl - czy system potraktuje go jako innego usera ?


wg. mnie wszelkie dane na czas polaczenia naly trzymac w sesji, a jesli chcemy aby uzytkownik nie musial sie logowac za kazym wejscie na strone: wystarczy zapisac mu w cookie id sesji, nie niszczyc danych sesyjnych, a przy ponownym wejsci sprawdzac, czy istotnie w cookie jest SID - jesl itak to odczytujemy dane sesyjne.
Go to the top of the page
+Quote Post
Sm0key
post
Post #30





Grupa: Zarejestrowani
Postów: 69
Pomógł: 1
Dołączył: 26.02.2004
Skąd: kielce. //Świętokrzyskie

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


Co do sesji trzeba uważac na multi hosting -- ponieważ sesje są skłądowane w jednym miejscu i można je podglądnać. Tu może dać rade rozmowa zadministratorem aby ustalał każdej stronie inny tmp do sesji lub własny system sesji oparty o baze danych. (IMG:http://forum.php.pl/style_emoticons/default/blink.gif) taki jak jest opisany w artykułach na php.pl i innych stronach a nawet w podręczniku php
Go to the top of the page
+Quote Post
Vengeance
post
Post #31





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


Cytat
string session_save_path ( [string ścieżka])


I twój problem jest rozwiązany ;]
Go to the top of the page
+Quote Post
kwiateek
post
Post #32





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(Sm0key @ 2004-08-16 15:46:33)
Co do sesji trzeba uważac na multi hosting -- ponieważ sesje są skłądowane w jednym miejscu i można je podglądnać. Tu może dać rade rozmowa zadministratorem aby ustalał każdej stronie inny tmp do sesji lub własny system sesji oparty o baze danych. (IMG:http://forum.php.pl/style_emoticons/default/blink.gif) taki jak jest opisany w artykułach na php.pl i innych stronach a nawet w podręczniku php

Możesz też przechowywać sesje w bazie danych (sql bądź tekstowej).

Pozdrawiam.
Go to the top of the page
+Quote Post
MrMag
post
Post #33





Grupa: Zarejestrowani
Postów: 154
Pomógł: 5
Dołączył: 24.02.2004

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


proboje wlasnie zabezpieczyc formularz przed dodaniem wpisu z innej strony, ale cos mi nie dziala ten referer :/

czy moge uzyc funkcji sprawdzenia referera w przypadku gdy dane nadchodza poprzez POST?

Ten post edytował MrMag 23.08.2004, 09:12:24
Go to the top of the page
+Quote Post
AndyPSV
post
Post #34





Grupa: Zarejestrowani
Postów: 393
Pomógł: 5
Dołączył: 6.02.2003
Skąd: The.Luciferian.Doctrine.p
df

Ostrzeżenie: (30%)
XX---


Cytat
Jestem ciekawy Waszych doświadczeń i sposobów zabezpieczania formularzy przed niebezpiecznymi wpisami
Po prostu należy filtrować wszystkie zmienne $_POST i $_GET i 'no problem':
  1. <?php
  2.  
  3. foreach($_GET as $a => $b)
  4.  $_GET[$a] = htmlspecialchars($b);
  5.  
  6. ?>


podobnie z $_POST:

  1. <?php
  2.  
  3. foreach($_POST as $a => $b)
  4.  $_POST[$a] = htmlspecialchars($b);
  5.  
  6. ?>

.
Go to the top of the page
+Quote Post
snaiper
post
Post #35





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 20.12.2004

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


mam dwa pytanka
1) na zajeciach facet nam powiedzial ze trzymanie hasla w sesji jest niebezpieczne niestety nie powiedzial dlaczego, moze wy cos wiecie na ten temat ?

2) mowil tez ze jezeli w osobnym pliku ktory jest potem dolaczany mamy zmienne globalne w ktorych znajduje sie nazwa hosta, user i haslo potrzebne do polaczenia sie z baza to nalezy go trzymac w innym miejscu gdzie znajduja sie pliki ze strona(?) czy jakos tak, niezbyt zajazylem o co mu chodzilo
Go to the top of the page
+Quote Post
Ociu
post
Post #36





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




1. Nie zakodowane napewno jest niebezpiecznie trzymać (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Mnie jakoś wpadło w naług dawanie md5(sha1(haslo/sid/etc.));
2. Jeżeli dobrze zrozumiałem, to pewnie chodziło mu o tworzenie plików trzymających tylko dane do łączenia się z bazą danych.
Go to the top of the page
+Quote Post
Vengeance
post
Post #37





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


@snaiper: Taki scenariusz: Ktoś włamał się na serwer, twoja strona jest dobrze zabezpieczona. "Haker" nie ma dostępu do twoich baz MySQL a także nie może podglądać plików .php
Jednak prawa pozwalają mu na odczyt danych z katalogu /tmp
Tworzy odpowiedni skrypt, dzięki czemu jako użytkownik "Apache" ma prawo odczytać każdy plik sesji z katalogu /tmp. Teraz bez problemu zdobędzie twoje niezakodowane hasło.

Ja raz, tak zdobyłem admina na pewnej stronie. Hasła tam nie było, ale był znacznik wskazujący na poziom uprawnień. Nic nie mogłem zrobić z plikami i sql, ale zedytowałem plik swojej sesji przyznając sobie prawa admina.
Go to the top of the page
+Quote Post
bigZbig
post
Post #38





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Sesje powinny byc przechowywane w bazie danych, a jesli nawet sa zapisywane w plikach, to katalog w ktorym sa przechowywane powinien byc stosownie zabezpieczony przy pomocy .htaccess. W ciasteczkach - jesli juz zachodzi koniecznosc ich uzycia np. w celu umozliwienia autologowania moznaby przechowywac zahaszowana kombinacje identyfikatora sesji i IP. Jesli uzytkownik ma dynamiczne to albo rezygnujemy ze sprawdzania IP i obnizamy poziom zabezpieczen, albo niestety wymuszamy koniecznosc logowania za kazdym razem. Tak czy inaczej jest to sposob traktowania IP opisany wczesniej przez squida.

Osobiście uważam za bezcelowe przehowywanie w ciachu loginu, id uzytkownika, a juz tym bardziej hasla.
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #39





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


Cytat(DeyV @ 2003-06-05 18:41:44)
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 + (IMG:http://forum.php.pl/style_emoticons/default/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

numer IP to zły przykład... tak samo jak przegladarka... i inne dane które mogą być 'zmienne' tylko dlatego ze istnieje cos takiego jak serwery proxy.
Go to the top of the page
+Quote Post
kysiu.pl
post
Post #40





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 24.10.2004

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


Cytat(MrMag @ 2004-08-22 23:53:59)
proboje wlasnie zabezpieczyc formularz przed dodaniem wpisu z innej strony, ale cos mi nie dziala ten referer :/

czy moge uzyc funkcji sprawdzenia referera w przypadku gdy dane nadchodza poprzez POST?

  1. <?php
  2.  
  3. #Podajesz nazwe adres twojej www
  4. $domena = &#092;"http://twojastrona.pl/\";
  5.  
  6. $http_referer= (!empty($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : $domena;
  7.  
  8. if (!preg_match(&#092;"#\".$domena.\"#si\", $http_referer)) { echo \"Próba włamania\"; } 
  9. else { echo&#092;"Wszystko OK\"; }
  10.  
  11. ?>
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 12:18