Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z tokenem
Forum PHP.pl > Forum > Przedszkole
Bojakki
Znalazlem w necie takiego tokena:

  1. <?php
  2. // Nadaje nazwe sesji i ja startuje.
  3. session_name("sess");
  4.  
  5. // dodatkowe naglowki, by nie buforowac wyniku
  6. header ("Expires: Mon, 22 Sep 1997 09:00:00 GMT");
  7. header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  8. header ("Cache-Control: no-store, no-cache, must-revalidate");
  9. header ("Cache-Control: post-check=0, pre-check=0", false);
  10. header ("Pragma: no-cache");
  11.  
  12. // tworzę obrazek o okrelonych wymiarach
  13. $grafix = imagecreate(88, 31);
  14.  
  15. // Losowanie kolorow dla tla i napisu
  16. mt_srand(time()*123456789);
  17.  
  18. //kolor tekstu
  19. $white = imagecolorallocate($grafix, 255, 255, 255);
  20. $black = imagecolorallocate($grafix, 0, 0, 0);
  21. // maluję tło
  22. // otwieram obrazek typu PNG
  23. $grafixBackground = @imagecreatefromjpeg("token.jpg");
  24. // kopiuje cala zawartosc na $grafix
  25. imagecopy($grafix, $grafixBackground, 0, 0, 0, 0, 88, 31);
  26. // Losowanie slowa
  27.  
  28. $sAllowedChars = 'abcdefghijklmnopqrstuvwxyz';
  29. $sAllowedChars .= '0123456789';
  30.  
  31. $sAllowedChars = str_shuffle( $sAllowedChars );
  32. $sPassword = substr( $sAllowedChars, 0, 6 );
  33. //definiuje zbior czcionek i wybieram losowo jedna
  34. $font  = "verdana.ttf";
  35. imagettftext($grafix, 12, 0, 15, 20, $black, $font, $sPassword);
  36.  
  37. //zanieczyszam obrazek niewielkimi liniami
  38. for($i=1;$i<13;$i++){
  39. $randPixSpaceLeft = mt_rand(10, 88);
  40. $randPixSpaceTop = mt_rand(0, 31);
  41. imageline($grafix, $randPixSpaceLeft, $randPixSpaceTop, $randPixSpaceLeft+10, $randPixSpaceTop+7, $white);
  42. }
  43.  
  44. // przekazuje przez sesje wylosowane slowo
  45. $_SESSION["choosenWord"] = $sPassword;
  46.  
  47. // wysyłam odpowiedni nagłówek a następnie obrazek do przeglšdarki
  48. header("Content-type: image/jpeg");
  49.  
  50. imagejpeg($grafix);
  51.  
  52. // sprzštam po sobie
  53. imagedestroy($grafix);
  54. ?>


Wszystko dziala ok (obrazek sie generuje i wyswietla) gdy kod jest sam an stronie. Gdy wrzucilem kod w formularz to zamiast strony wyswietla sie tylko i wylacznie adres strony na ktorej jestem. Wie ktos gdzie lezy problem?

Z gory dziekuje za pomoc
l0ud
Ty go umieściłeś pomiędzy swój kod php? Tak się nie da, musisz zapisać go najlepiej w oddzielnym pliku i dołączyć go do formularza poprzez zastosowanie znacznika img, np.

<img src='token.php' alt=''>

gdzie token.php to ten skrypt
qqrq
No ale jak "wrzuciłeś kod do formularza"? Musisz ten plik, który ci generuje token potraktować jak obrazek, wrzucić adres do niego do taga IMG. Potem (po zatwierdzeniu formularza) porównujesz zmienną sesji, która trzyma ci token z tym, co użytkownik wpisał w pole.
Bojakki
rzeczywiscie trzeba zrobic tak jak pisales. Obrazek juz sie pojawia, ale formularz nie bardzo dziala.
Wyglada on tak. Formularz jest przyjmowany gdy nie wpisze nic w pole token czyli tak jakby $_SESSION['choosenWord'] nie bralo zmiennej z obrazka. Nie wiem czy ten formularz jest w ogole dobrze zbudowany:/
  1. <?php
  2. if(isset($_REQUEST['submit']))
  3. {
  4. $s = 0;
  5. $username = 'gość-'.mysql_real_escape_string(strip_tags($_POST[guestname]));
  6. $comment = mysql_real_escape_string(strip_tags($_POST[comment]));
  7. $stringl = strlen($comment);
  8. $stringl2 = strlen($username);
  9. if ($_SESSION['choosenWord'] != $_POST['token'])
  10. {
  11. $z.="<li>Źle przepisałeś znaki z obrazka</li>";
  12. $s++;
  13. }
  14. if ($stringl < 6)
  15. {
  16. $z.="<li>Zbyt krótka wiadomość</li>";
  17. $s++;
  18. }
  19. if ($stringl2 == 0)
  20. {
  21. $z.="<li>Nie uzupełniłeś pola Autor</li>";
  22. $s++;
  23. }
  24.  
  25. if ($s==0)
  26. {
  27. $success=1;
  28. }
  29. else
  30. {
  31. $success=-1;
  32. }
  33.  
  34. $myquery = mysql_query("INSERT INTO a_post (parentid, username, userid, dateline, pagetext, allowsmilie, ipaddress, ico
    nid, visible)
  35. VALUES ('{$parentid}','{$username}','{$userid}','{$lastpost}','{$comment}', 1, '{$ip}', '{$iconid}', 1)") or die(mysql_error());
  36. $lastpostid = mysql_insert_id($mysql);
  37. }
  38.  
  39. if($success==1)
  40. {
  41. echo '<li>Wiadomość została dodana</li>';
  42. echo '<center><a href="news.php?wsk='.$wsk.'">Zobacz</a></center>';
  43. }
  44. elseif($success==-1)
  45. {
  46. echo $z;
  47. echo '<center><a href="news.php?wsk='.$wsk.'">Spróbuj jeszcze raz</a></center>';
  48. }
  49. else
  50. {
  51. echo '
  52. <form method=POST action="'.$typen.'.php?wsk='.$wsk.'">
  53. Autor: <input type="text" size="33" name="guestname"/><br />
  54. Obrazek: <input type="text" size="23" name="token"/><br />
  55. <img src='token.php' alt='token'>
  56. Treść:<br /><textarea name="comment" rows="6" cols="70" type="text" value size="1000" maxlength="1000"></textarea><br />
  57. <input type="submit" name="submit" value="ZatwierdĽ" />
  58. </form>';
  59. }
  60. ?>
l0ud
A zainicjowałeś sesję i nazwałeś ją tak samo jak jest to w skrypcie tokena?
Bojakki
No wlasnie o sesji zapomnialem. Teraz jest juz picus glancus;)
l0ud
Dodaj jeszcze tylko sprawdzanie, czy kod tokena nie jest pusty - inaczej bardzo łatwo obejść taki token smile.gif
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.