Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][inne]Autoryzacja użytkownika
Forum PHP.pl > Forum > Przedszkole
Grzegorz_Gie
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
Pyton_000
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.
Tomplus
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.
emstawicki
Czemu hasło chcesz szyfrować, a nie hashować ?
Grzegorz_Gie
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.
Tomplus
Ale wiesz czym jest hashowanie w PHP i że korzysta się z tego bardzo prosto?

password_hash
Grzegorz_Gie
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?
viking
Trzymaj te dane w sesji przy czym po stronie klienta jest tylko id sesji.
Grzegorz_Gie
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)
viking
Musisz wystartować sesję (session_start)
Grzegorz_Gie
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.
viking
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.
Grzegorz_Gie
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 ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.