Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][inne]Autoryzacja użytkownika, Mój pomysł na autoryzację użytkownika
Grzegorz_Gie
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 2.11.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dzień dobry,

od dłuższego czasu jestem na bakier z programowaniem w PHP - Nie przemawia do mnie jakoś super mocno.
Chciałbym się wspomagać innymi językami lub też nawet językami skryptowymi, dziś wpadłem na ciekawy moim zdaniem pomysł i chciałbym na otwartym forum zadać pytanie co do sensu jego realizacji [który ja widzę smile.gif ]

Sytuacja wygląda tak, że mamy przykładowo formularz logowania, który zawiera się w pliku login.php

login.php przekazuje metodą POST do pliku: loginVerification.php nazwę użytkownika oraz hasło, które następnie zapisuje do pliku w osobnych liniach:
JestemGrzeGrze
SCfby6s74U6vU9vX6uTh3wKNU

Następnie przy pomocy Ajax asynchronicznie odwołuję się do pliku: VerificationFinal.php który ma za zadanie pobrać jedynie zmienną w której określam czy logowanie jest poprawne - Tyle info odnośnie procesu logowania.

Od zaplecza zaplanowałem sobie w ten sposób, że przy pomocy serwera (Stoi na Windzie ze względu na konkretne wymagania jakie stawiam przed moją aplikacją) jeden z workerów co 500 ms sprawdza plik w którym loginVerification pod nazwą pliku nazwy usera zapisał czyste hasło.

Worker jako aplikacja natywna pod Windows ma za zadanie pobrać to zapisane hasło, przepuścić przez koder i zobaczyć czy zakodowane hasło (moją autorską metodą) zgadza się z tym zapisanym w pliku dotyczącym danych logowania usera.

Jeśli informacje zgadzają się tj. nazwa usera, adres e-mail wtedy utworzony jest plik który VerificationFinal.php zaczytuje, przydziela token sprawdzany na każdym etapie działania systemu i przechodzi do dashboard.

Moje pytanie zatem brzmi, czy ktokolwiek z forum spotkał z takim systemem zabezpieczeń?
Osobiście uważam, że daje mi to wiele korzyści (Nigdy nie programowałem webowo poza stronami www więc mogę być w błędzie)

Nikt bez znajomości działania klucza szyfrującego nie jest w stanie odgadnąć hasła, fizyczne włamanie do serwera tj uzyskanie dostępu do plików i katalogów powoduje, że ktoś przy pomocy inżynierii wstecznej jest w stanie dowiedzieć się jak działa klucz szyfrujący, nie licząc zaciemniania kodu.
Czy ktoś zna jakieś bardzo, bardzo bezpieczne metody zabezpieczenia serwisu? (Praca na danych osobowych we własnym zakresie)
Na marginesie nadmienię, że wszystkie workery mają pracować poza katalogiem webowym, który jest widoczny z zewnątrz.

Co myślicie o takim pomyśle?
Jestem ciekaw Waszego zdania, dopiero chcę wgryźć się w PHP, miałem z nim styczność ale nie ukrywam, że nie była ona ogromna

Grzegorz_Gie
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Samo zapisanie hasła plaing textem to już jest zły pomysł.
Dodatkowo odpytywanie 2x/s czy coś w pliu jest... też bez sensu.
Prościej by było ustawić twoją aplikację w tryb słuchania i postem czy czymś przesłać dane do tej aplikacji z poziomu PHP.
Go to the top of the page
+Quote Post
Tomplus
post
Post #3





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Dla podpowiedzi:
Hasło użytkownika w ten sposób został zainplementowany w DokuWiki, https://www.dokuwiki.org

Na dłuższą metę to rozwiązanie się nie sprawdza.
Go to the top of the page
+Quote Post
emstawicki
post
Post #4





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Czemu hasło chcesz szyfrować, a nie hashować ?


--------------------
Jak w Olsztynie, to tylko w Revolver Rock Cafe .
Sprawdź postęp propagacji DNS
Go to the top of the page
+Quote Post
Grzegorz_Gie
post
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 2.11.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Wróciłem smile.gif

W zasadzie od strony technicznej działa to tak, że wpadłem w lekką grę słów, tak chodzi o haszowanie hasła.

User mimo wszystko wie co przesyła a Worker daje skryptowi po stronie PHP znać, że logowanie przebiegło poprawnie, czyli ta metoda całkowicie odpada ze względu na małe bezpieczeństwo ?

Głównie chodzi o to, że moje aplikacje przez WEB będą przyjmować dane, które będą już obrabiane po stronie aplikacji natywnych.

Ktoś jest w stanie polecić jakiś w miarę sensowny temat w którym podobny problem był rozwiązywany ?

Pyton_000, właśnie hasło nie jest zapisane w "bazie" jako plain text smile.gif
Jest właśnie przepuszczone przez aplikacje, która odpowiednio je obrabia a po stronie serwera PHP ma dostęp do tego zaszyfrowanego hasła, jesli user wprowadza hasło wtedy jest ono zapisane w czystej formie, przechwytuje je worker i szyfruje porówując z zaszyfrowanym hasłem i wtedy zwraca do PHP true or false i nic więcej.
Więc de facto to co przesyła do mnie user nie ma większego znaczenia (Pomijając możliwość przechwycenia hasła przez osoby 3cie).
Chodzi mi o bezpieczeństwo wew. samego rozwiązania.
Go to the top of the page
+Quote Post
Tomplus
post
Post #6





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Ale wiesz czym jest hashowanie w PHP i że korzysta się z tego bardzo prosto?

password_hash
Go to the top of the page
+Quote Post
Grzegorz_Gie
post
Post #7





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 2.11.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Tomplus @ 20.10.2016, 18:37:05 ) *
Ale wiesz czym jest hashowanie w PHP i że korzysta się z tego bardzo prosto?

password_hash



Tutaj mnie akurat zaskoczyłeś bo nie miałem zielonego pojęcia (Jak pisałem jestem noga w PHP)

Wykorzystałem do tego celu mojego UDFa którego wykorzystywałem do systemu bezpiecznego logowania z kluczami USB więc miałem lwią część roboty wykonaną, udało mi się spiąć aplikację natywną z PHP i działa to zadowalająco, czy taka niestandardowa metoda może z powodzeniem zastępować te występujące w parserze PHP ?

Głowię się jeszcze nad jedną kwestią, jaka metoda w PHP jest najbardziej odpowiedna do przekazywania danych między skryptami ? Chodzi mi o dane tymczasowe, których nie chcę koniecznie notować w bazie danych, ma to być ID sesji, nazwa usera, poziom uprawnień, czas logowania, czas wylogowania i tego typu rzeczy.

Zastanawiałem się nad formularzami ukrytymi z wysyłaniem z POST lub Cookies z czego zapewne ta 2ga opcja jest mniej bezpieczna.

Mogę liczyć na jakieś propozycje?
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Trzymaj te dane w sesji przy czym po stronie klienta jest tylko id sesji.


--------------------
Go to the top of the page
+Quote Post
Grzegorz_Gie
post
Post #9





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 2.11.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No właśnie o sesjach czytałem i nie wiem dlaczego ale mój webserv nie za bardzo chce z nimi współpracować (Czytam sobie kurs PHP dość intensywnie) i przepisując nawet toćka w toćkę nie działa sad.gif

Sesja zostaje utworzona, zmienna zostaje zapisana ale po stronie innego skryptu nie mogę z niej skorzystać wywołując ją
  1. <?php
  2. echo $_SESSION['UserName'];
  3.  
  4. ?>


Zastanawiając się napisałem również tak:

  1. <?php
  2. echo ($UserName);
  3. ?>


Również nie działa, coś robię źle? (Widzę, że niepotrzebnie porzuciłem pomysł z sesjami)
Go to the top of the page
+Quote Post
viking
post
Post #10





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Musisz wystartować sesję (session_start)


--------------------
Go to the top of the page
+Quote Post
Grzegorz_Gie
post
Post #11





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 2.11.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Pominąłem to tutaj ale wiem tongue.gif

Pobawiłem się jeszcze chwilkę, nie chce się nawet przyznawać co zrobiłem źle.

A jak przechowywać te dane sesji po stronie serwera lub po stronie klienta?
Z tego co widzę to nie mam tutaj możliwości manipulowania tym wszystkim co do typu tych wartości w tym kontekście gdzie mają być przechowywane.

Ten post edytował Grzegorz_Gie 21.10.2016, 09:36:16
Go to the top of the page
+Quote Post
viking
post
Post #12





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Domyślnie sesja zapisywana jest w katalogu http://php.net/manual/en/function.session-save-path.php jako plik o nazwie id sesji. Po stronie klienta jako cookie albo w URL. Jest pełno bibliotek ktore umożliwiają np zapis do bazy danych. Jest też jeszcze jedna opcja czyli tokeny JWT i też znajdziesz gotowe biblioteki choćby pierwsza z brzegu https://github.com/firebase/php-jwt.


--------------------
Go to the top of the page
+Quote Post
Grzegorz_Gie
post
Post #13





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 2.11.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Okej, teraz rozumiem.

Teraz mam problem tego typu, że po poprawnie skonfigurowanej sesji przekazuje ona dane z A do B ale z B do C już nie przekazuje kompletnie nic.

Przychodzi do głowy jakaś myśl co mogłem zrobić źle? smile.gif

@edit 1

Mam, dopiero doczytałem, że sesja musi startować za każdym razem smile.gif

@edit 2

Jeszcze mam jedno pytanie, dość sporo udało mi się dziś napisać.
Trzechowywanie danych w sesji jest bardzo wygodne, pytanie brzmi jak łatwo można je podmienić? Nadaje się to do przekazywania danych do zapisu / odczytu ?
Jaki jest poziom bezpieczeństwa tej metody ?

Ten post edytował Grzegorz_Gie 21.10.2016, 18:45:47
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 21:11