• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Logowanie, bezpieczeństwo, w jaki sposób zrobić to dobrze?

Object Storage Arubacloud
+1 głos
625 wizyt
pytanie zadane 5 sierpnia 2021 w C# przez CdxProj Użytkownik (910 p.)

Hej. Z góry oznajmiam iż jestem świeżakiem, jeśli popełnię jakiś błąd to proszę bez linczu jak na pewnym forum na litekę "e" :). Otóż pisze program w winforms, jest to projekt który pisze w celu nauczenia się języka. Posiadam formularz logowania i tutaj pojawia się mój problem.

1. Jak dobrze zrobić logowanie, aby wszystko było bezpiecznie? 

Na poradnikach dla początkujących, widzę jak ludzie wrzucają swojego connection stringa do kodu, logują się szukając danych podanych od użytkownika przy logowaniu (login,hasło) w bazie danych. Wyczytałem (i też tak podejrzewam) że to skrajnie głupie, podawanie swojego loginu i hasła do bazy danych bezpośrednio w kodzie.. Jak zatem to rozwiązać? Tak żeby było bezpiecznie, tak żeby użytkownik nie musiał się bać zalogować do aplikacji :D. 

+Nadmienię tutaj jeszcze tylko, że znam zasady z hashowaniem haseł, używaniem salt i wiem dokładnie jak się to robi, chodzi mi konkretnie o wpisywanie swoich danych dostępowych do kodu.

2. Jak postępować z danymi użytkownika w dalszej części, po zalogowaniu?

Okej, załóżmy że nasz użytkownik się zalogował. Znika okno logowania, pojawia się program. W programie bym chciał wyświetlić:

  • Nickname użytkownika
  • Ilość punktów 

Oczywiście do obu danych posiadam pola im odpowiadające w bazie danych. Z samymi komendami do SQL nie mam problemu, mógłbym te dane najzwyczajniej w świecie wyciągnąć z bazy, ale domyślam się że wpisanie na sztywno SELECT points FROM users WHERE user=login; jest skrajnie głupim pomysłem, co prawda by zadziałało ale ja chciałbym żeby aplikacja była bezpieczna i szukam sposobu aby zrobić to poprawnie.

Bardzo proszę o pomoc, oprócz samych wskazówek wszelkie materiały (po angielsku też mogą być) się przydadzą, z góry dziękuję! :)

Używam PostgreSQL, Piszę w C# WinForms

1 odpowiedź

+1 głos
odpowiedź 5 sierpnia 2021 przez gagyn Stary wyjadacz (11,050 p.)
wybrane 28 września 2021 przez CdxProj
 
Najlepsza

Odpowiadając na 1. pytanie:

Connection stringi najlepiej podawać w plikach konfiguracynych (dla ASP.NET Core to będzie najczęściej appsettings.json, dla WinForms app.config). Z takim podejściem najczęściej się spotykam.

Alternatywna opcja, to podawanie danych jako environment variables lub argumenty przekazywane podczas uruchomienia programu. Plus tej opcji jest taki, że łatwo można podać te argumenty z CI/CD. Minus, że trudniej uruchamiać aplikację podczas zwykłego developmentu.

2. pytanie:

W środowisku .NET Core mamy takie narzędzie jak Entity Framework Core (lub w .NET Framework - Entity Framework). Korzystanie z niego ogarnia właśnie kwestie SQL Injections za nas (oczywiście to dużo bardziej rozbudowane narzędzie).

Co do SELECT points FROM users WHERE user=login dobrze, że zdajesz sobię sprawę z niebezpieczeństwa. Ktoś mógłby dać jako login - "jakisLogin OR 1=1" i wszyscy userzy byliby pobrani.

 

W samej technologii WinForms nie siedzę, więc nie wiem jakie rozwiązanie w tym przypadku jest najlepsze. Starałem się odpowiedzieć w sposób uniwersalny, więc ktoś mający większe doświadczenie z Winforms może mieć celniejszą odpowiedź.

komentarz 5 sierpnia 2021 przez CdxProj Użytkownik (910 p.)
Bardzo dziękuję za odpowiedź :). Czy znasz może jakieś godne polecenia źródła do nauki Entity Framework? Wiem że mogę pogooglować i pewnie znajdę z 10 poradników stworzonych przez kolegów z Indii, ale może mógłbys coś polecić? Mogą być książki do kupienia, mogą być anglojęzyczne materiały, bez znaczenia.
komentarz 6 sierpnia 2021 przez kubaapk Nałogowiec (44,270 p.)

Do EFCore: msdn - poważnie, tutaj jest wszystko - masz nawet ładnie poukładane tematycznie.

A co do sekretów to nie polecam trzymać tego w appsettings.json, tylko korzystać z secret storage

komentarz 6 sierpnia 2021 przez CdxProj Użytkownik (910 p.)
No właśnie, zależy mi o takim materiale do EF (nie core). Czym to się różni w działaniu, w którym z tych plików trzymam connection stringa? Jak mogę ocenić co lepiej trzymać w jednym, a co w drugim?
1
komentarz 6 sierpnia 2021 przez kubaapk Nałogowiec (44,270 p.)

Co do EF, to zaleca się, żeby nowe projekty pisać już na Core. Tutaj masz porównanie EF6 vs Core, jeśli w Corze jest wszystko czego potrzebujesz to nie ma sensu stawiać tego na starym EF6.

Co do appsettings.json, to trzymałbym tam konfiguracje projektu, żadnych danych wrażliwych. Wszelkie dane wrażliwe, tj. klucze API, SSH, sekrety do tokenów etc. w secret storage. Secret storage różni się tym, że nigdy nie zacommitujesz kluczy przez przypadek, bo domyślnie tworzy Ci plik z kluczami poza projektem. 

Podobne pytania

0 głosów
2 odpowiedzi 285 wizyt
pytanie zadane 9 maja 2018 w PHP przez Marchiew Dyskutant (7,690 p.)
0 głosów
0 odpowiedzi 419 wizyt
pytanie zadane 17 lutego 2021 w C# przez disaster Bywalec (2,120 p.)
0 głosów
1 odpowiedź 169 wizyt
pytanie zadane 28 grudnia 2018 w PHP przez _Visni4PL_ Obywatel (1,320 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...