![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 92 Pomógł: 0 Dołączył: 6.05.2009 Skąd: warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Strwożyłam prostą stronę z panelem administracyjnym. Właśnie dostałam wiadomość od firmy testującej ze aplikacja jest dziurawa i właśnie siedzą w moim panelu admina i mogą dowolnie modyfikować dane (podali login i hasło które faktycznie zapisałam w bazie). Dodam ze login i hasło przechowuje w bazie w postaci jawnej (nie md5), do tego logowanie robię metoda POST. Na stronie jest tez wyszukiwarka która jak wiadomo łączy się z baza. Danych przesyłanych z formularza nie przepuszczam przez funkcje addslashes() ale czy robiąc to zapobiegłabym przed wykradzeniem z bazy loginu i hasła? Proszę napiszcie jakie są sposoby aby porządnie zabezpieczyć prosta stronę z panelem admina aby nikt nie mógł dostać się do mojego loginu i hasła? Ten post edytował AniaR 15.11.2010, 10:37:45 |
|
|
![]() |
![]() ![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 31 Dołączył: 30.03.2009 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
Umieść ten skrypt na obcym serwerze zmień hasło i login , niech wtedy testują i zobaczymy czy są tacy dobrzy. (są programy które odkodują md5 ), znajdziesz je w internecie, w książce PHP5 zaawansowane programowanie opisany jest w miarę bezpieczny sposób logowania- sesje i inne tam...,
Na każdego można mieć haka , dajcie mi tylko człowieka. http://phpedia.pl/wiki/Jak_odkodowa%C4%87_MD5%3F Ten post edytował celbarowicz 15.11.2010, 10:53:51 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 8 Dołączył: 13.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
... nie przepuszczam przez funkcje addslashes() ale czy robiąc to zapobiegłabym przed wykradzeniem z bazy loginu i hasła? Jedno jest pewne, że jak zabezpieczysz się przed sql injection to będzie trudniej. O sql injection możesz poczytać tutaj. Dodatkowo przechowuj tylko hash dla hasła. Zdecydowanie utrudnia to uzyskanie hasła nawet po włamie do bazy. Pytanie w jaki sposób uzyskali login i hasło, może mają dostęp do ftp? Co do 'odkodowania md5' - nie można odkodować md5! Co najwyżej można znaleźć ciąg znaków, który daje taki sam hash. -------------------- Web usability
Program Partnerski |
|
|
![]()
Post
#4
|
|
![]() Grupa: Administratorzy Postów: 1 552 Pomógł: 211 Dołączył: 7.07.2009 Skąd: NJ ![]() |
Jeżeli angielski nie stanowi przeszkody możesz zawsze poczytać SM
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Przed SQL Injection najskuteczniej chroni się aplikację używając zapytań preparowanych i podpinania parametrów, ponieważ pod takie zapytanie silnik bazy sam podstawia przekazywane wartości i nie wykonuje SQLa w nich zawartego. Poczytaj w manualu o PDO/mysqli i prepared statements.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) ![]() ![]() |
Ja mam jeszcze inny sposób.
Z tego co przeczytałem wnioskuję, że nie znasz się za dobrze na PHP dlatego podam Ci kilka innych metod, które w kilka sekund mogą zmniejszyć ryzyko sforsowania zabezpieczeń Twojego systemu. 1. nie używaj addslashes (bo nie do tego służy) tylko mysql_real_escape_string 2. ogranicz maksymalną ilość znaków w polu nazwy użytkownika i hasła (jeśli username nie będzie dłuższy niż 6 znaków to ustaw max na tyle ile trzeba) 3. szyfruj hasła w SHA1 lub MD5 (sugeruję to pierwsze) 4. po prostu ukryj gdzieś panel logowania dla administratora (i zablokuj dla google bot - none) 5. monitoruj logowania - będziesz wiedział, czy coś jest nie tak ![]() Pozdrawiam. Ten post edytował modern-web 15.11.2010, 15:18:03 -------------------- Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
2. ogranicz maksymalną ilość znaków w polu nazwy użytkownika i hasła (jeśli username nie będzie dłuższy niż 6 znaków to ustaw max na tyle ile trzeba) Wybacz, ale w jaki sposób wpłynie to na bezpieczeństwo aplikacji? Moim zdaniem tylko i wyłącznie w sposób negatywny. Wówczas dasz potencjalnemu włamywaczowi informację o maksymalnej długości pola z nazwą użytkownika. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) ![]() ![]() |
Nie koniecznie musi być to 6 znaków. Na przykład użytkownik ma nick 'forsa', a max długość ustawić można na 7... Podobnie dlaczego by nie wprowadzić na np. 20 znaków. Przecież nikt nie wybiera tak długiej nazwy użytkownika.
Chodzi bardziej o to byś nie mógł wklepać w pole kawałka zapytania SQL. Bo przepraszam, ale bez ograniczenia to można by zrobić spore zamieszanie... Każda metoda jest dobra, tak samo każdy ma swój punkt widzenia. Sądzę, że jest to pewnego typu zabezpieczenie (choć mierne ale zawsze), alternatywne rozwiązanie jego problemu. Ten post edytował modern-web 15.11.2010, 15:35:29 -------------------- Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Punkt 5ty kolegi rozwinąłbym o dodawanie do bazy wpisanej treści w pole hasła.
Fajnie potem sobie poczytać co to hakierzy próbowali wpisać w hasło (w stylu or 1=1). Najlepiej o błędnych logowaniach informować przez maila - można szybciej zareagować, a jeśli dostaną się do bazy to raporty mogą usunąć. Co do długości loginu / hasła - ja bym po prostu zaproponował walidacje, która by określała dozwolone znaki (preg_match) i w pregu lub osobnej funkcji także liczbę znaków. Ten post edytował markonix 15.11.2010, 17:40:15 -------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Administratorzy Postów: 1 552 Pomógł: 211 Dołączył: 7.07.2009 Skąd: NJ ![]() |
Nie koniecznie musi być to 6 znaków. Na przykład użytkownik ma nick 'forsa', a max długość ustawić można na 7... Podobnie dlaczego by nie wprowadzić na np. 20 znaków. Przecież nikt nie wybiera tak długiej nazwy użytkownika. I tu się mylisz. Czasami nazwa użytkownika = adres email. |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Cytat I tu się mylisz. Czasami nazwa użytkownika = adres email. Na wszystko są sposoby ![]() Poza tym argumenty "bo loginem może być data urodzenia" są bezpodstawne - na każdy typ danych znajdziesz metodę zabezpieczenia a skracanie do określonej ilości znaków loginu czy hasła to raczej podstawa |
|
|
![]()
Post
#12
|
|
![]() Grupa: Administratorzy Postów: 1 552 Pomógł: 211 Dołączył: 7.07.2009 Skąd: NJ ![]() |
No i co w związku z tym, że istnieje wbudowana walidacja maila? Rozchodzi się o ograniczanie ilości znaków, a adres e-mail może być spokojnie dłuższy niż przykładowe 20 znaków.
@down: Raczej o to, że ciężko jest czasami ograniczyć liczbę znaków do takiej ilości, żeby taka forma zabezpieczenia miała sens. Jak chcesz się spierać o głupoty to mogę napisać, że nie ma też informacji o tym, że login mailem nie jest. Ten post edytował Daiquiri 15.11.2010, 18:37:56 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Rozchodzi się o to, że szukasz dziury gdzie jej nie ma... bo z tego co widziałem [czytałem] nie ma wzmianki o tym, że login to mail...
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Kto dzisiaj próbuje "odkodować" hashe? Tęczowe tablice - to jest odpowiedź ;] @topic Zobacz sobie teraz logi z serwera, zobacz jakich ataków próbowali, jak modyfikowali adresy, jakie dane przesyłali do Twoich skryptów. Wtedy będzie można myśleć jak to zabezpieczyć a nie strzelać w ciemno. -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#15
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Nie koniecznie musi być to 6 znaków. Na przykład użytkownik ma nick 'forsa', a max długość ustawić można na 7... Podobnie dlaczego by nie wprowadzić na np. 20 znaków. Przecież nikt nie wybiera tak długiej nazwy użytkownika. Chodzi bardziej o to byś nie mógł wklepać w pole kawałka zapytania SQL. Bo przepraszam, ale bez ograniczenia to można by zrobić spore zamieszanie... Zapewne ograniczysz długość loginu za pomocą atrybutu maxlength, czyż nie? No to mistrzu FireBug i w 5 sekund podmieniam tą wartość na dowolną inną. Jak już chcesz ograniczać to tylko poprzez substr() po stronie aplikacji. Pewnie teraz napiszesz "to miałem na myśli!" w co i tak nie uwierzę. PS: czepiam się, bo Twoje wypowiedzi mają charakter typu "ja się znam" - chciałbym Cię nieco sprowadzić na ziemię. Ten post edytował phpion 15.11.2010, 19:46:07 |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
chcesz ograniczać to tylko poprzez substr() po stronie aplikacji. A nie przypadkiem strlen / dla polskich znaków: mb_strlen ? ;] -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 317 Pomógł: 58 Dołączył: 6.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Chyba nie, bo tym się raczej nie da ograniczyć długości stringa... -------------------- |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Nie możesz ucinać loginu! W ten sposób użytkownik Test|owy będzie mógł się zalogować na konto Test|era. (| symbolizuje maksymalną długość).
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 317 Pomógł: 58 Dołączył: 6.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Tak czytam tą dyskusję i zastanawiam się, czy jest sens w ogóle dalej się rozwodzić nad skracaniem loginu? Skracasz dane do długości takiej, jaką ma odpowiednie pole w bazie. Resztę musisz i tak zabezpieczyć odpowiednim escapeowaniem zapytań, przed ich wysłaniem do bazy. Kropka. Co z tego, że ograniczysz login, np. do iluś znaków, jak ktoś Ci może w pole z nazwą usera wpisać:
Jeśli nie zabezpieczysz kodu przed spreparowanym zapytaniem, to żadne skracanie nic Ci nie da. -------------------- |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Chyba nie, bo tym się raczej nie da ograniczyć długości stringa... A to ciekawe ![]()
Jak nie wiesz, to błagam nie mieszaj w temacie. -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 18:42 |