![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 24.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Jako iż to mój pierwszy post, witam wszystkich serdecznie (IMG:style_emoticons/default/smile.gif)
Napisałem prosty skrypt do rejestracji użytkownika. Chcę się dowiedzieć jakie błędy popełniłem i czy takie zabezpieczenia są wystarczające. Z góry dziękuję (IMG:style_emoticons/default/winksmiley.jpg)
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
W pierwszym zapytaniu ' znajduje się w htmlspecialchars(). To błąd, który pokazuje przy okazji, że to zabezpieczenie w obecnej formie jest do... niczego (IMG:style_emoticons/default/winksmiley.jpg)
Bo skoro zapytanie działa mimo tego, oznacza to, że pojedyncze cudzysłowy ' nie są zamieniane przez htmlspecialchars(). A skoro nie są no to mamy dziurę (IMG:style_emoticons/default/winksmiley.jpg) Rady: - nie polecam używania htmlspecialchars() przed wrzucaniem czegokolwiek do bazy. Funkcję tą stosuj najlepiej tuż przed wyświetleniem czegoś wprowadzonego przez użytkownika (najlepiej bezpośrednio w echo '') - aby zapobiec XSS. - zamiast htmlspecialchars() do zapytań w bazie użyj mysql_real_escape_string aby zabezpieczyć się przed SQL Injection - skoro ładnie łączysz ciągi za pomocą . (zamiast wstawiać zmienne bezpośrednio w nich - pomiędzy " ") zacznij używać pojedynczych cudzysłowów ' ' zamiast podwójnych " ". W zapytaniach SQL natomiast ciągi opakuj " " zamiast w ' '. Słowem - zamień miejscami ' i " w zapytaniach. Powinno wyglądać to np. tak:
A... i md5() jest już do niczego (IMG:style_emoticons/default/winksmiley.jpg) . Zamiast tego użyj przynajmniej sha1. Można jeszcze dodać tzw. sól do hasła - poszukaj. Ten post edytował l0ud 24.06.2010, 21:51:15 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 9 Dołączył: 6.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
1. Ładniej będzie sprawdzać błędy tak: (wtedy niepotrzebna jest zmienna $fail)
2. W preg_match możesz już sprawdzać, czy ma dobrą długość np. tak (ale to jak chcesz): 3. Wystarczy:
4. Osobiście wszystkie dane od użytkownika najpierw trimuje, później mysql_real_escape_string i ewentualnie strip_tags (ale tutaj masz wyrażenia regularne).
5. Hasło najlepiej zabezpieczyć jakąś solą/ziarnem/czy jak to inaczej nazywają indywidualnym dla każdego usera (sporo o tym na forum) 6. Ja bym dał formularz na dół oddzielony od kodu php, tak by się wyświetlał jeżeli będą jakieś błędy. Kiedy wszystko jest ok używać exit();, ale to znowu zależy od gustu. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Odsyłam do tematu: Temat: Bezpieczenstwo skryptow PHP
btw. wyrażenia masz źle napisane, możesz tutaj użyć odpowiedniego ctyle_ zamiast ich. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
- przede wszystkim wszelkie dane otrzymane od użytkownika i użyte w zapytaniu wkładaj do mysql_real_escape_string()
- nie wiem po co używasz htmlspecialchars() skoro chcesz zezwalać tylko na litery i cyfry..może sprawdź najpierw w manualu co robi ta funkcja - czy to preg_match() na pewno działa? bo coś mi nie gra w tych wzorcach |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 12:48 |