![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 0 Dołączył: 21.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Kiedyś napisałem prosty CRM który działał ale był skrajnie niebezpieczny, tzn nie ma żadnego filtrowania danych przesyłanych z formularzy ani też tych zapisywanych w bazie.
Teraz zająłem się właśnie kwestią bezpieczeństwa aby mój twór stał się w końcu przydatny. Na pierwszy ogień poszła kwestia panelu logowania i tu pytanie: czy sprawdzenia hasła i loginu jak poniżej jest Waszym zdaniem wystarczająco bezpieczne:
Zakładam że loginem jest adres e-mail a hasło nie może zawierać znaków \ / ' ` " \n \s |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 516 Pomógł: 63 Dołączył: 27.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Musisz się jeszcze dużo uczyć
Po pierwsze : if(isset($_POST['login']) || isset($_POST['haslo'])) -- wystarczy sprawdzić czy istnieje submit session_start(); -- dałeś dopiero po warunku , dlaczego ? Później powstają tematy, że sesja nie działa na wszystkich stronach. Otwieraj sesje najlepiej na początku dokumentu. Wiem, ze to logowanie i po logowaniu ta strona nie bedzie dostepna, ale moze robisz ten sam błąd w innych dokumentach $zapytanie = "SELECT * FROM biz_user WHERE p_login = '".trim($_POST['login'])."'"; -- napisałeś, że znasz się na atakach typu sql. Nie znasz sie ani troche. Przestudiuj dokładnie o co z nimi chodzi a zobaczysz jak powazną luke masz w tym miejscu. Funckja trim przed niczym Cię tutaj nie chroni. jeśli jesteś początkujący, to jeśli piszesz sprawdzenie jakiegoś formularza to zacznij najpierw od zdefiniowania zmiennych, np: $login = mysql_escape_string($_POST['login']); $haslo = "$_POST['haslo']; Jeśli nie uzywasz PDO, to przeflitruj dodatkowo login przez wyrażenie regularne - to chyba najpewniejszy sposób. Dopiero po sprawdzeniu zmiennych tworzysz warunek, gdzie jesli obie te zmienne sa ok , to dopiero pobierasz dane z bazy (IMG:style_emoticons/default/exclamation.gif) ! Hasła nie musisz sprawdzać. Każdy powinien miec takie hasło jakie chce. Z bazy danych sprawdzac tylko czy jest taki login w bazie i pobierasz jego hasło. Jeśli hasło zgadza sie z tym podanym z formularza, to tworzysz sesje Ten post edytował gitbejbe 16.09.2013, 09:51:07 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 0 Dołączył: 21.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Musisz się jeszcze dużo uczyć To nie podlega dyskusji. Po pierwsze : if(isset($_POST['login']) || isset($_POST['haslo'])) -- wystarczy sprawdzić czy istnieje submit Tak też zrobię. session_start(); -- dałeś dopiero po warunku , dlaczego ? Później powstają tematy, że sesja nie działa na wszystkich stronach. Otwieraj sesje najlepiej na początku dokumentu. Wiem, ze to logowanie i po logowaniu ta strona nie bedzie dostepna, ale moze robisz ten sam błąd w innych dokumentach W pozostałych plikach mam start sesji na początku. dokładnie wygląda to tak:
$zapytanie = "SELECT * FROM biz_user WHERE p_login = '".trim($_POST['login'])."'"; -- napisałeś, że znasz się na atakach typu sql. Nie znasz sie ani troche. Przestudiuj dokładnie o co z nimi chodzi a zobaczysz jak powazną luke masz w tym miejscu. Funckja trim przed niczym Cię tutaj nie chroni. jeśli jesteś początkujący, to jeśli piszesz sprawdzenie jakiegoś formularza to zacznij najpierw od zdefiniowania zmiennych, np: $login = mysql_escape_string($_POST['login']); $haslo = "$_POST['haslo']; Jeśli nie uzywasz PDO, to przeflitruj dodatkowo login przez wyrażenie regularne - to chyba najpewniejszy sposób. Dopiero po sprawdzeniu zmiennych tworzysz warunek, gdzie jesli obie te zmienne sa ok , to dopiero pobierasz dane z bazy (IMG:style_emoticons/default/exclamation.gif) ! Nie napisałem że znam się na atakach typu sql. Napisałem że wiem co to jest atak typu SQL Injection, to spora różnica. Natomiast jeśli spojrzysz na mój drugi post, zauważysz że właśnie tak zrobiłem. Login jest przefiltrowany przez wyrażenie regularne, a dopiero później zmienna $clear['login'] umieszczona w zapytaniu do bazy. Hasła nie musisz sprawdzać. Każdy powinien miec takie hasło jakie chce. Z bazy danych sprawdzac tylko czy jest taki login w bazie i pobierasz jego hasło. Jeśli hasło zgadza sie z tym podanym z formularza, to tworzysz sesje Dzięki - rzeczywiście wystarczy porównać. Ten post edytował Doody 17.09.2013, 16:05:12 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 13:34 |