Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Token i bezpieczeństwo.
puz219
post 16.02.2009, 13:47:57
Post #1





Grupa: Zarejestrowani
Postów: 201
Pomógł: 0
Dołączył: 1.07.2007

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


Witam.

Napisałem sobie skrypt tokena, tylko nie wiem, czy moje rozwiązanie jest bezpieczne oraz jak trudne będzie odczytanie takiego tokena przez bota.

Skrypt składa się z 3 plików:

funkcje.php
  1. <?php
  2. function FormRejestracja($tokencode, $komentarz="") {
  3.     $_SESSION["token"] = $tokencode;
  4.     ?>
  5.         <form method="POST" name="rejestracja" action="formularz.php">
  6.             <? echo $komentarz; ?>
  7.             <fieldset>
  8.                 <legend>Login</legend>
  9.                 <input type="text" id="login" name="login">
  10.    
  11.             </fieldset>
  12.             <fieldset>
  13.                 <legend>Hasło</legend>
  14.                 <input type="password" id="pass" name="pass">
  15.             </fieldset>
  16.             <fieldset>
  17.                 <legend>Powtórz hasło</legend>
  18.                 <input type="password" id="pass" name="pass2">
  19.             </fieldset>
  20.             <fieldset>
  21.                 <legend>E-mail</legend>
  22.                 <input type="text" id="email" name="email">
  23.             </fieldset>
  24.             <fieldset>
  25.                 <legend>Token</legend>
  26.                 <? //include_once("user_token.php");                
  27.                 echo '<img src="token_pic.php">';?>
  28.                 <input type="text" id="token" name="token">
  29.             </fieldset>
  30.             <input type="hidden" name="los" value="<? echo $chars; ?>">
  31.             <p><input type="submit" id="sudmit" name="send_reg" value="Rejestruj"></p>
  32.         </form>
  33.     <?}
  34.  
  35. function createToken() {
  36. $char = array(1,2,3,4,5,6,7,8,9,'q','w','e','r','t','y','u','i',
  37. 'o','p','l','k','j','h','g','f','d','s','a','z','x','c','v','b','n','m','Q'
  38. ,'W','E','R','T','Y','U','I','O','P','L','K','J','H','G','F','D','S',
  39. 'A','Z','X','C','V','B','N','M');
  40.     $text = "";
  41.     for($i = 0; $i < 7; $i++)
  42.     {
  43.         $text .= $char[array_rand($char)];
  44.     }
  45.  
  46. return $text;
  47. }



formularz.php
  1. <?php
  2. include_once(funkcje.php);
  3.  
  4. $token = createToken();
  5.  
  6. if(isset($_POST["send_reg"]))
  7.     {
  8.        if($_POST['token'] == $_SESSION['token'])
  9.        {
  10.           $_SESSION["kom_r"] = "Token poprawny";
  11.          
  12.           echo $_SESSION["kom_r"];
  13.        }
  14.        else
  15.        {
  16.           FormRejestracja($token, "Token niepoprawny");
  17.        }
  18.     }else {
  19.    
  20.     FormRejestracja($token); }
  21. ?>


token_pic.php
  1. <?php
  2. header ('Content-type: image/gif');
  3.  
  4. $text = $_SESSION["token"];
  5.  
  6. /* generowanie tokena za pomocą biblioteki GD */
  7. /* jeżeli ktoś chce kod, to proszę pisać, a tutaj nie wklejam,
  8. bo jest dość długi, a i tak nic nie wnosi do kwestii bezpieczeństwa (no chyba, że się mylę) */
  9.  
  10. imagegif($image);
  11. imagedestroy ($Image);
  12. ?>


Prosiłbym o sprawdzenie napisanych skryptów pod katem bezpieczeństwa oraz opinię, czy takie "coś" będzie trudne do złamania dla bota?

Pozdrawiam

Ten post edytował puz219 16.02.2009, 13:50:12
Go to the top of the page
+Quote Post
ddiceman
post 16.02.2009, 14:17:00
Post #2





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

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


To bedzie banalnie latwe do zlamania przez bota. Dlaczego? Bo jezeli bot nie przechowuje ciasteczek (w tym SESSION_ID) to znaczy, ze nie nie beda dla niego dostepne zmienne sesyjne. W zwiazku z czym wystarczy, ze przesle puste $_POST['token'], to wtedy porownane do pustego (bo nie zainicjowanego) $_SESSION['token'] da zawsze true.
Zrob chociaz
  1. <?php
  2. if(!empty($_SESSION['token']) && $_POST['token'] === $_SESSION['token'])
  3. ?>
Go to the top of the page
+Quote Post
puz219
post 16.02.2009, 14:38:25
Post #3





Grupa: Zarejestrowani
Postów: 201
Pomógł: 0
Dołączył: 1.07.2007

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


Czyli sprawdzenie czy zmienna sesyjna $_SESSION['token'] nie jest pusta to jedyna rzecz, którą mogę zrobić, żeby zabezpieczyć ten formularz czy może nie. Przepraszam za takie może trochę idiotyczne pytanie, ale w jaki sposób maksymalnie zabezpieczyć tego tokena.

Może mój sposób rozumowania jest błędny i token powinien być zrobiony całkowicie w inny sposób, bo jak widać kiepsko u mnie z kwestiami bezpieczeństwa biggrin.gif, a tego tokena chciałbym maksymalnie zabezpieczyć, co jest chyba zrozumiałe.

Pozdrawiam
Go to the top of the page
+Quote Post
ddiceman
post 16.02.2009, 14:46:26
Post #4





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

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


Zakladajac, ze nikt Ci sie nie wlamie na serwer, nie masz nigdzie var_dump($_SESSION); i nie zakladasz, ze bot odczyta kod z obrazka (co nie jest specjalnie trudne, jesli ktos sie uprze), to na tym poziomie - tak, jest to wystarczajace
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 Wersja Lo-Fi Aktualny czas: 12.06.2025 - 19:26