![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 1 Dołączył: 1.07.2017 Ostrzeżenie: (0%) ![]() ![]() |
Wiem, że najprzystępniejszą drogą tworzenia kont jest oparcie ich o bazę danych, ale czy są inne drogi. Zalożmy, że strona będzie obslugiwać 10 użytkowników dalo by się to sensownie zrobić poprzez np. plik
![]() |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 879 Pomógł: 230 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście. Przykładowo
user:hash:group Kod phpkoder:$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a:admin,user tomplus:$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K:user Oczywiście musisz zablokować dostęp do tego pliku aby przypadkiem nikt nie otworzył go jako plik tekstowy. Ale takie zastosowanie jest np. w DokuWiki, wiki bez obsługi zewnętrznych baz danych. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zawsze możesz sqlite. Jest to 1000x lepsze niż taka płaska baza w txt.
-------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Tablica w PHP, sprawdza się przy micro aplikacjach. Przynajmniej nie martwisz się o SQL injection
![]() -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
@viking nie przesadzajmy
![]() |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Z plikami jest fajnie dopóki się nie pomyli i sobie czegoś nie nadpisze przez równoległe operacje. Wtedy cały plik najczęściej do kosza. A sqlite to też jeden plik i zazwyczaj jest na każdym serwerze.
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 1 Dołączył: 1.07.2017 Ostrzeżenie: (0%) ![]() ![]() |
Dziekuję za odpowiedzi.
Stworzyłem system kont w oparciu o plik, wykorzystałem szyfrowanie AES zamiast hash-owania do ukrycia kluczy użytkowników. Teraz jest problem jak ukryć klucz AES. Umieścić w kodzie w jakiś wymyślny sposób, czy zostawić to jak niżej i będzie dobrze, bo rzecz jasna jak ktoś przejmie plik z kodem php to i tak odczyta klucz.
user:encrypted_password:privileges Plik z kontami wygląda tak: aa:eAMHtDIxZtVjoAUDO4YlC8uu0QAQyPxRvP542hkbSJk=:user Stworzyłem również system sesji oparty o plik. user:ID_SESJI aa:2DI,A4-ON52:-INC/;B6,NF8O)KZR+2:GAAI0?=XZ;>1WLS@40QCPRHPOVZ:*DV?5?KH2U=MLT3BXUV+O*PM1=YL-H9 Ogólnie celem aplikacji jest stworzenie bezpiecznej skrzynki na pliki mają być spełnione następujące funkcjonalności: - tworzenie kont - logowanie z sesja (własny mechanizm bez wykorzystania cookies) - wysyłanie plików do swojego folderu - wysyłanie plików do folderu innego użytkownika - dobra walidacja i mechanizmy zabezpieczające A jeśli chodzi o operacje równoległe w php to jak mam to rozumieć jak dwie osoby w tym samym momencie załóżmy będą tworzyć konto i w tym samym momencie dotrze żądanie do serwera to dojdzie do konfliktu ![]() Ten post edytował phpkoder 3.07.2017, 10:42:35 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 879 Pomógł: 230 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) ![]() ![]() |
Przykład z manuala
Ogólnie rzecz mówiąc, zapis wtedy zakolejkuje się. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Tak, ale tutaj trzeba by było zrobić lock na odczyt tak na prawdę, bo sytuacja:
- dwoje userów odczytuje zawartość pliku - oboje robią zmiany. - Najpierw zapisuje drugi user - potem nadpisuje całość pierwszy user. tak więc to też trzeba zabezpieczyć. Sensownym wyjściem jest odczyt wartości dla usera, usunięcie starego wpisu, a potem dodanie na koniec nowego wpisu. W ten sposób zabezpieczysz się przed taką sytuacją. No chyba że tak na prawdę to nie będzie miało miejsca ale sytuacje różne trzeba przemyśleć i przewidzieć reakcje. |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Tak, ale tutaj trzeba by było zrobić lock na odczyt tak na prawdę, bo sytuacja: - dwoje userów odczytuje zawartość pliku - oboje robią zmiany. - Najpierw zapisuje drugi user - potem nadpisuje całość pierwszy user. tak więc to też trzeba zabezpieczyć. Sensownym wyjściem jest odczyt wartości dla usera, usunięcie starego wpisu, a potem dodanie na koniec nowego wpisu. W ten sposób zabezpieczysz się przed taką sytuacją. No chyba że tak na prawdę to nie będzie miało miejsca ale sytuacje różne trzeba przemyśleć i przewidzieć reakcje. Można by też zamiast edycji dodawać kolejne linie. W momencie autoryzacji pobierany byłby najświeższy wpis z aktualnym hasłem. Do tego CRON który czyści stare wpisy dla tego samego użytkownika |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Można i tak. To też jest jakieś wyjście.
W sumie takie kombinowanie zamiast użycie sqlite ![]() |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 879 Pomógł: 230 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) ![]() ![]() |
Jak dla mnie zawsze uderza mnie kwestia jak duża pula użytkowników będzie.
Jeżeli jest to pula mała <100 to szansa że rejestracja będzie dwóch użytkowników w TEJ SAMEJ SEKUNDZIE jest abstrakcyjnie mała. |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Szanse wygrania w totka też są małe
![]() ![]() |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Jak dla mnie zawsze uderza mnie kwestia jak duża pula użytkowników będzie. Jeżeli jest to pula mała <100 to szansa że rejestracja będzie dwóch użytkowników w TEJ SAMEJ SEKUNDZIE jest abstrakcyjnie mała. Nadal tu nie widzę problemu, choć faktycznie szansa jest niemal zerowa. Jeżeli file_put_contents samo się ładnie nie zakolejkuje to wystarczy zrobić override tej funkcji ze sprawdzeniem czy jest lock, jeżeli jest to ponowić próbę po 0.25 sekundy. Sama akcja na pliku zajmuje mikrosekundy, nawet przy pliku w tym formacie zawierającym 2k użytkowników. |
|
|
![]() ![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 1 Dołączył: 1.07.2017 Ostrzeżenie: (0%) ![]() ![]() |
Pozakladalem locki na funkcje. Plik sesji i z kontami nie powinien wybuchnąć. Aktualnie zastanawiam się jakie prawa dostępu nadać do pliku: - folder z plikiem sesji i kontami (0600) ![]() - z kontami (0600) ![]() - do pliku sesji (0600) ![]() - do folderu z użytkownikami (0777) ![]() - do folderu użytkownika slużącego do skladowania swoich plików ( ![]() ![]() - do folderu użytkownika na pliki wyslane przez innych użytkowników ( ![]() ![]() Nie tak prosto mądrze poustawiać te parametry. Struktura folderów jest następująca. accountFolder: - session.txt - accounts.txt users: - marek_myFile: * pliki .... - marek_fileFromUsers * plikiWyslanePrzezInnychUzykownikow .... Trzeba się zabezpieczyć na każdą ewentualność chcę profesjonalnie napisać ten program http://forum.php.pl/style_images/upgrade_i...cons/icon10.gif Ten post edytował phpkoder 13.07.2017, 11:13:54 |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Te ustawienia miały by sens dla konta systemowego systemu operacyjnego. Dla webu i tak wszystko przechodzi przez serwer i musi na jego prawach pracować.
-------------------- |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 1 Dołączył: 1.07.2017 Ostrzeżenie: (0%) ![]() ![]() |
A ok czyli ustawić 0777 i liczyć na to, że serwer ma zabezpieczenia nie do przejścia.
To w takim razie jeszcze jedno pytanie. Jak zablokować plik przed pobraniem ![]() Najlepiej, żeby serwer po prostu milczal na próbę wpisania takiego URI. |
|
|
![]()
Post
#19
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Dajac 0777 na wszystko dajesz wszystkim do tego dostep.
Daj tylko dla serwera www Zas co do drugiego pytania to pliki te maja lezec poza publicznym folderem www i nikt z www sie do nich nie dobierze. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Co do praw na folder, możesz dać dowolne, ważne żeby plik nie był wystawiony na zewnątrz.
project | -- data | | | -- plik-z-uzytkownikami -- public | | | -- index.html gdzie /project/public jest podpięty do domeny |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 10:34 |