Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zabezpieczenie strony wieloma jednorazowymi hasłami
Duor
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.09.2015

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


Witam smile.gif
Staram się stworzyć zabezpieczenie strony hasłami jednorazowego użytku, które są zapisane w pliku tekstowym.
Na samej górze strony umieściłem skrypt, który nie pozwala wczytać reszty strony dopóki nie podany poprawnego hasła. Jednak opiera on się na funkcji "stristr", więc jeśli moje hasła zapisane w pliku to przykładowo "haslo123" i "haslo1" to wystarczy przecież wpisać np. "has" i już otrzymamy dostęp, ponieważ ten ciąg znaków również występuje.

Próbowałem także wczytać wszystkie hasła z pliku do tablicy, a następnie sprawdzić funkcją in_array() czy podane przez użytkownika hasło jest poprawne (znajduje się w tablicy), ale funkcja wychwytywała tylko ostatnie hasło z pliku, reszta haseł nie działała.


  1. <?php
  2. $sprawdz = $_SESSION['haslo'];
  3. $hasla = file_get_contents('haslo.txt'); //wczytanie haseł z pliku
  4.  
  5. if(stristr($hasla, $sprawdz) != true){ //jeśli nie podano poprawnego hasła wyświetl formularz wprowadzenia hasła
  6. echo ('
  7. <h2 style="margin-left:15px;">Podaj swój kod dostępu:</h2>
  8. <form method="POST" action="sprawdz.php"> //wprowadzenie hasła przez użytkownika
  9. <input type="password" placeholder="haslo" class="form-control" id="pass" name="haslo" width="300px;" style="margin-left:0px;">
  10. ');
  11. exit(); //wczytaj dalszą część strony, jeśli podano poprawne hasło
  12. }
  13.  
  14. //nadpisanie pliku z hasłami, ale bez zapisywania hasła właśnie użytego (tak, żeby hasła były jednorazowe)
  15. $hasla=str_replace($sprawdz, '', $hasla);
  16. file_put_contents('haslo.txt', $hasla);
  17. ?>


Plik spradz.php:
  1. <?php
  2. $haslo = $_POST["haslo"];
  3. $_SESSION['haslo'] = $haslo;
  4. header("Location: index.php");
  5. ?>


Mam nadzieję, że można rozwiązać mój problem w miarę prosty sposób smile.gif
(Zdaję sobie sprawę, że takie zabezpieczenie nie należy do bardzo bezpiecznych, ale na potrzeby nauki mogę sobie na to pozwolić wink.gif )

Ten post edytował Duor 28.09.2015, 18:29:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Wazniak96
post
Post #2





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


Jak wygląda plik z hasłami? Hasła zapisane po spacji czy w nowych linijkach ?
Go to the top of the page
+Quote Post
Duor
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.09.2015

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


W nowych linijkach np.
haslo1234
haslo123
haslotest
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





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

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


pewnie używałeś do tego celu file(), a ta wczytując linie do tablicy zostawia znak nowej linii na końcu każdej linijki (poza ostatnią jeśli nie było takoweg), więc musisz dodać odpowiedni parametr (patrz manual)
Go to the top of the page
+Quote Post
Duor
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.09.2015

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


Mój skrypt oparty na in_array() oraz z wykorzystaniem trim() do usunięcia znaków białych wygląda teraz tak:

  1. $sprawdz = trim($_SESSION['haslo']); //usuwa znaki białe z hasła podanego przez użytkownika
  2. $hasla = file('haslo.txt'); //wczytuje hasła do tablicy
  3. $ileelementow = count ($hasla); //sprawdzam ile haseł zostało wczytanych
  4.  
  5. while ($i <= $ileelementow) { // usuwam białe znaki ze wszystkich haseł w tablicy
  6. $hasla[$i] = trim($hasla[$i]);
  7. $i = $i +1;
  8. }
  9.  
  10. if (in_array($sprawdz, $hasla) == false) { //jeśli nie podano prawidłowego hasła wyświetl formularz
  11. echo ('
  12. <h2 style="margin-left:15px;">Podaj swój kod dostępu:</h2>
  13. <form method="POST" action="sprawdz.php">
  14. <input type="password" placeholder="haslo" class="form-control" id="pass" name="haslo" width="300px;" style="margin-left:0px;">
  15. ');
  16. exit();
  17. }
  18.  
  19.  
  20. // -------------- Przerobiony skrypt usuwania użytego hasła, tym można zająć się później --------------
  21. $ii = 0;
  22. while ($ii <= $ileelementow) {
  23. if (stristr($hasla[$ii], $sprawdz) == true) {
  24. $hasla[$ii] = "";
  25. }
  26. $nowehasla = $nowehasla . $hasla[$ii] . "/n";
  27. $ii = $ii + 1;
  28. }
  29. file_put_contents('haslo.txt', $nowehasla);


Wydaje mi się, że wszystko wygląda całkiem logicznie, jednak teraz strona ładuje się od razu cała, pomijając formularz hasła - tak jakby warunek
  1. if (in_array($sprawdz, $hasla) == false)

nie był spełniony, a przecież domyśnie powinien właśnie być, ponieważ nie podaliśmy jeszcze żadnego hasła...

Będę bardzo wdzięczny za jakiekolwiek wskazówki, im dłużej się z tym męczę tym bardziej zależy mi na znalezieniu sposobu biggrin.gif

Ten post edytował Duor 29.09.2015, 17:04:52
Go to the top of the page
+Quote Post
kapslokk
post
Post #6





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


  1. while ($i <= $ileelementow) { // usuwam białe znaki ze wszystkich haseł w tablicy
  2. $hasla[$i] = trim($hasla[$i]);
  3. $i = $i +1;
  4. }

Przecież Pyton Ci napisał, żebyś użył odpowiedniej flagi do file(), a Ty kombinujesz.
  1. $hasla = file('haslo.txt', FILE_IGNORE_NEW_LINES); //wczytuje hasła do tablicy


Poza tym jak używasz zmiennej, to warto ją pierw stworzyć. Mam na myśli $i.
Go to the top of the page
+Quote Post
Duor
post
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.09.2015

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


Rzeczywiście wystarczyło poczytać trochę o flagach i wszystko działa, wielkie dzięki za pomoc!

Wklejam gotowy kod, może komuś kiedyś sie przyda wink.gif
  1. $sprawdz = $_SESSION['haslo'];
  2. $hasla = file('haslo.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // Tego mi było trzeba biggrin.gif
  3. $ileelementow = count ($hasla);
  4.  
  5. if (in_array($sprawdz, $hasla) == false) {
  6. echo ('
  7. <h2 style="margin-left:15px;">Podaj swój kod dostępu:</h2>
  8. <form method="POST" action="sprawdz.php">
  9. <input type="password" placeholder="haslo" class="form-control" id="pass" name="haslo" width="300px;" style="margin-left:0px;">
  10. ');
  11. exit();
  12. }
  13.  
  14. //zapis pozostałych haseł - bez hasła włąśnie użytego
  15. $ii = 0;
  16. while ($ii <= $ileelementow) {
  17. if (stristr($hasla[$ii], $sprawdz) == true) {
  18. $hasla[$ii] = "";
  19. }
  20. $nowehasla = $nowehasla . $hasla[$ii] . "\r\n";
  21. $ii = $ii + 1;
  22. }
  23. file_put_contents('haslo.txt', $nowehasla);


Ten post edytował Duor 29.09.2015, 20:15:19
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: 22.08.2025 - 07:41