michat34
21.10.2012, 18:56:53
witam zalozmy ze mam na stornie autoryzacje uzytkownikow. login,haslo,email.
login i email filtruje strip tags oraz trim.
a co z hasłem? strip_tags usunie znaki specjalne, przez co uzytkownik nie bedzie sie mogl po rejestracji zalogowac i nie bedzie wiedział co sie dzieje.
a czy jak nie zrobie filtracji to moze mi sie włamac na strone przez formularz?
ciezka sprawa, co robic?
abort
21.10.2012, 19:07:08
A co do hasła:
1. trzymasz zakodowane w bazie
2. przy logowaniu się usera wykonujesz na zmiennej $_POST['pass'] takie operacje, jakbyś chciał zaszyfrować hasło i porównujesz szyfr z danymi z bazy
michat34
21.10.2012, 19:21:07
wiem o hashowaniu

ale mi chodzi o to czy przed wysłaniem hasła do bazy nalezy je wczesniej przefiltrowac czy nie?
no bo jak do inputa user da jako hasło:
Marek<123&&
to po filtracji do bazy zapisze sie
Marek123
i przy logowaniu uzytkownik bedzie sie dziwił czemu nie moze sie zalogowac
a z kolei jak go nie przefiltruje to moze mi wstrzyknąc do bazy jakis niefajny kod..
Crozin
21.10.2012, 19:29:52
Skoro wiesz o hashowaniu to niby jakim cudem do bazy miałby trafić "niefajny kod"?
PanGuzol
21.10.2012, 19:31:58
W obu przypadkach do zapytania podajesz hash hasła(md5 lub sha-1), bez żadnego filtrowania przed hashowaniem. Hash na 100% niema niebezpiecznych znaków.
michat34
21.10.2012, 19:40:31
ok dziekuje wszystkim tak zrobie
pamil
22.10.2012, 19:40:01
Cytat(michat34 @ 21.10.2012, 19:56:53 )

[...] filtruje strip tags oraz trim. [...]
Żadne zabezpieczenie, używasz funkcji o których nie masz pojęcia.
webdice
23.10.2012, 07:33:45
Generalnie powinieneś filtrować każde dane. Często wykonuje się takie zapytanie:
SELECT * FROM `TABLE` WHERE `PASSWORD` = SHA1( '[PASSWORD]' )
a w takim wypadku już nie jest fajnie:
SELECT * FROM `TABLE` WHERE `PASSWORD` = SHA1( 'password' ) OR 1 = 1 --' )
erix
23.10.2012, 12:30:26
Zacznijmy od tego, że głupotą jest obarczanie bazy takim zadaniem, jak hashowanie. Ktoś nie filtruje długości pola i mamy zajechany serwer.

Tak, pole na hasło trzeba filtrować. Właśnie ze względu na długość, bo jakoś nie spotkałem się z sytuacją, w której ktoś używa haseł dłuższych niż 100 znaków, a brak obcinania do jakiejś długości po prostu zajedzie Ci serwer, gdy do hashowania puści Ci kilka MiB, zwłaszcza gdy używasz hasha, który celowo jest zasobożerny.
webdice
23.10.2012, 22:39:42
Cytat(erix @ 23.10.2012, 13:30:26 )

Zacznijmy od tego, że głupotą jest obarczanie bazy takim zadaniem, jak hashowanie. (...)
Tu się w żadnym wypadku nie zgodzę. Weryfikacja długości pola to jest jedna sprawa, a używanie funkcji hashujących w zapytaniu to druga. Równie dobrze możemy powiedzieć że używanie CONCAT to głupota z tego samego powodu.
Zresztą tak jak napisałem w poprzednim poście, trzeba filtrować każde pole. Nigdy nie powinno się ufać danym pochodzącym od użytkownika.
erix
24.10.2012, 11:55:17
Cytat
Tu się w żadnym wypadku nie zgodzę.
Jakieś argumenty?
webdice
24.10.2012, 14:02:26
Piszesz że korzystanie z hasowania w zapytaniu jest głupotą ze względu na to że ktoś może wrzucić do zmiennej bardzo długi ciąg znaków. Tak samo może wrzucić do zmiennej wykorzystywanej przykładowo przez CONCAT czy inną funkcje.
erix
24.10.2012, 14:30:22
Ale fakt wydajności, to tylko jeden z powodów.
Admin włącza slowlogi, chcesz, aby hasła użytkowników się w nich znalazły?
Niktoś
24.10.2012, 14:34:43
Ja się zgodzę z erixem, że należy filtrować dane pod względem długości(wystarczy zwykłe wyrażenie regularne z klamerkami określającymi długość ciągu, chyba nie powinno być to trudne), w innym przypadku co jeśli dane wejściowe przekroczą dozwolony zakres znaków w danej komórce ,czy będzie ona typu int czy varchar w bazie danych? Należy się liczyć z tym ,że każda baza danych, czy to będzie MySql, czy MSSQL, czy ORACLE, takie ograniczenia ma a przekroczenie takiego zakresu może mieć przykre konsekwencje.
webdice
24.10.2012, 16:07:20
~Niktoś długości nie sprawdzałbym wyrażeniami regularnymi, są zbyt wolne.
~erix nie popadajmy w paranoje, jeśli chcemy mieć bezpieczny serwis to nie stawiamy go na hostingu współdzielonym gdzie administratorem jest obca dla nas osoba. Równie dobrze może przechwytywać komunikacje między klientem, a trudno wszędzie stosować SSL.
Każdy ma swoje zdanie i raczej z nasz nie udowodni drugiemu wyższości swojego, jednak uważam że nie ma nic złego w korzystaniu z funkcji hashujących w zapytaniu.
erix
25.10.2012, 12:07:20
Cytat
~erix nie popadajmy w paranoje, jeśli chcemy mieć bezpieczny serwis to nie stawiamy go na hostingu współdzielonym
Czasem nie ma takiej możliwości, bo klient sobie życzy tak, a nie inaczej.
Cytat
Równie dobrze może przechwytywać komunikacje między klientem, a trudno wszędzie stosować SSL.
Wynika to zazwyczaj ze skąpstwa.
nospor
25.10.2012, 12:16:51
Nawet jak postawisz SSL to admin serwera może poprostu wpisać w Twój kod php odpowiednią linijkę i będzie znał każde hasło

Ja tam osobiście też nie jestem zwolennikiem hashowania w mysql a to dlatego ze mysql nie zrobię hashowania tak, jak to mogę zrobic w php.
Pozatym już był raz przypadek w historii mysql ze w jednej wersji mysql HASH zwracał co innego niż w nowszej
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.