Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz i token
Forum PHP.pl > Forum > PHP
kamil6e
Witam serdecznie. Moje pytanie. Jak dodać do tego formularza token aby zabezpieczyć się przed spamem ?

  1. <?php
  2.  
  3. if ((empty($_POST['tresc']) or empty($_POST['imie']) or empty($_POST['email'])) and !empty($_POST['submit'])) {
  4. // wyświetlamy formularz
  5. echo "<center><table border=\"0\"><form method=\"post\">
  6. <tr>
  7. <td width=\"120px\">E-mail do</td>
  8. <td><select name=\"adresat\">
  9. <option value=\"".$_POST['cos@cos.pl']."\">admin</option>
  10. <option value=\"".$_POST['cos@cos.pl']."\">admin</option>
  11. </select></td>
  12. </tr>
  13. <tr>
  14. <td width=\"120px\">Imię i nazwisko *</td>
  15. <td><input type=\"text\" name=\"imie\" style=\"width: 150px\" value=\"".$_POST['imie']."\"></td>
  16. </tr>
  17. <tr>
  18. <td width=\"120px\">Adres e-mail *</td>
  19. <td><input type=\"text\" name=\"email\" style=\"width: 150px\" value=\"".$_POST['email']."\"></td>
  20. </tr>
  21. <tr>
  22. <td width=\"120px\">Adres strony</td>
  23. <td><input type=\"text\" name=\"www\" style=\"width: 150px\" value=\"".$_POST['www']."\"></td>
  24. </tr>
  25. <tr>
  26. <td width=\"120px\">Gadu Gadu</td>
  27. <td><input type=\"text\" name=\"gg\" style=\"width: 150px\" value=\"".$_POST['gg']."\"></td>
  28. </tr>
  29. <tr>
  30. <td width=\"120px\">Treść wiadomości *</td>
  31. <td><textarea name=\"tresc\" style=\"width: 250px; height: 150px\">".$_POST['tresc']."</textarea></td>
  32. </tr>
  33. <tr>
  34. <td> </td>
  35. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\"
  36. <input type=\"reset\" value=\"Wyczyść\"></td></form>
  37. </tr>
  38. <tr>
  39. <td> </td>
  40. <td>";
  41. // lub w przypadku nie wypełnienia formularza do końca
  42. echo "<span style=\"text-align: center;\"><b>Wypełnij wszystkie pola formularza!</b></span>";
  43. echo "</td>
  44. </tr>
  45. </table></center>";
  46. }
  47. elseif (empty($_POST['tresc']) or empty($_POST['imie']) or empty($_POST['email']) and empty($_POST['submit'])) {
  48. // wyświetlamy formularz
  49. echo "<center><table border=\"0\"><form method=\"post\">
  50. <tr>
  51. <td width=\"120px\">E-mail do</td>
  52. <td><select name=\"adresat\">
  53. <option value=\"cos@cos.pl\">admin</option>
  54. <option value=\"cos@cos.pl\">admin</option>
  55. </select></td>
  56. </tr>
  57. <tr>
  58. <td width=\"120px\">Imię i nazwisko *</td>
  59. <td><input type=\"text\" name=\"imie\" style=\"width: 150px\"></td>
  60. </tr>
  61. <tr>
  62. <td width=\"120px\">Adres e-mail *</td>
  63. <td><input type=\"text\" name=\"email\" style=\"width: 150px\"></td>
  64. </tr>
  65. <tr>
  66. <td width=\"120px\">Adres strony</td>
  67. <td><input type=\"text\" name=\"www\" style=\"width: 150px\" value=\"http://\"></td>
  68. </tr>
  69. <tr>
  70. <td width=\"120px\">Gadu Gadu</td>
  71. <td><input type=\"text\" name=\"gg\" style=\"width: 150px\"></td>
  72. </tr>
  73. <tr>
  74. <td width=\"120px\">Treść wiadomości *</td>
  75. <td><textarea name=\"tresc\" style=\"width: 250px; height: 150px\"></textarea></td>
  76. </tr>
  77. <tr>
  78. <td> </td>
  79. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\"
  80. <input type=\"reset\" value=\"Wyczyść\"></td></form>
  81. </tr>
  82. </table></center>";
  83. }
  84.  
  85. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  86. elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
  87. // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  88. // zmienna $message zawiera treść wiadomości
  89. $message = "<b>Imię i nazwisko:</b> $_POST[imie]<br><b>Adres e-mail:</b> $_POST[email]<br><b>Adres strony:</b> $_POST[www]<br><b>Gadu Gadu:</b> $_POST[gg]<br><b>Treść wiadomości:</b><br> $_POST[tresc]";
  90. // zmienna $header zawiera przede wszystkim adres zwrotny
  91. $header = "From: $_POST[imie] <$_POST[email]>\nContent-Type: text/html; charset=utf-8";
  92. // funkcja mail() za pomocą której wiadomość zostanie wysłana
  93. @mail($_POST['adresat'],"tytul","$message","$header")
  94. or die('Nie udało się wysłać wiadomości');
  95. // wyświetlenie komunikatu w przypadku powodzenia
  96. echo "<div align=\"center\"><strong>Wiadomość została wysłana.</strong><br><a href=\"javascript:history.back();\">poprzednia strona</a></div>";
  97. }
  98. ?>


proszę o pomoc.
piotrekkr
to wklej np w plik generujacy obrazek captcha:
obrazek.php
  1. <?php
  2. putenv('GDFONTPATH=' . realpath('.'));
  3. $fontDir  = 'fonts/'; // katalog z czcionkami 
  4. $fontFiles = array('verdana.ttf', 'impact.ttf', 'comic.ttf', 'arial.ttf'); // nazwy u�ywanych plik�w czcionek
  5. $imgType  = 'png'; // format wyswietlanej grafiki (png, gif, jpeg) 
  6. $length = 6; // d�ugos� losowego ci�gu 
  7.  
  8. $backColor = '#ffffff'; // kolor t�a grafiki 
  9. $fontColor = '#2a2a2a'; // kolor czcionki 
  10. $dotsColor = '#c0c0c0'; // kolor plam ;-) 
  11.  
  12. $token = substr(md5(uniqid(time())), 0 - $length); 
  13.  
  14. for($i = 0; $i < strlen($token); $i++)
  15. { 
  16.  if(($token{$i} >= 'a' and $token{$i} <= 'z') and (rand(0, 10) > 5))
  17.  {
  18. $token{$i} = strtoupper($token{$i});
  19.  }
  20. }
  21.  
  22. $_SESSION['token'] = $token;
  23.  
  24. function make_color($img, $color)
  25. {
  26.  if(is_resource($img) and preg_match('/^#[a-f0-9]{6}$/i', $color))
  27.  {
  28. $color = substr($color, 1);
  29. $rgb = array();
  30. for($i = 0; $i < 6; $i += 2) 
  31. {
  32.  $rgb[] = (int)hexdec($color{$i}.$color{$i + 1});
  33. }
  34.  
  35. return imagecolorallocate($img, $rgb[0], $rgb[1], $rgb[2]);
  36.  }
  37.  else
  38.  {
  39. return 0; 
  40.  }
  41. } 
  42.  
  43. header('Content-type: image/'.$imgType); 
  44.  
  45. $width = strlen($token) * 15 + 10; 
  46. $height = 25; 
  47.  
  48. $img = imagecreate($width, $height); 
  49.  
  50. $back = make_color($img, $backColor); 
  51. $font = make_color($img, $fontColor); 
  52. $dots = make_color($img, $dotsColor); 
  53.  
  54. $pts = array(); 
  55.  
  56. for($i = 0; $i < round($width / 1.5); $i++) 
  57. { 
  58.  $x = rand(0, $width); 
  59.  $y = rand(0, $height); 
  60.  
  61.  if(!in_array($x.'_'.$y, $pts)) 
  62.  { 
  63. imageellipse($img, $x, $y, rand(2, 7), rand(3, 6), $dots); 
  64. $pts[] = $x.'_'.$y; 
  65.  } 
  66.  else 
  67.  { 
  68. $i--; 
  69.  } 
  70. } 
  71.  
  72. for($i = 0; $i < strlen($token); $i++) 
  73. { 
  74.  imagettftext($img, rand(14, 16), rand(-10, 10), rand(3, 5) + $i * 15, 20 + rand(-3, 3), $font, $fontDir.'/'.$fontFiles[rand(0, count($fontFiles) - 1)], $token{$i}); 
  75. } 
  76.  
  77. switch($imgType) 
  78. { 
  79.  case 'jpeg': 
  80. imagejpeg($img); 
  81. break; 
  82.  case 'gif': 
  83. imagegif($img); 
  84. break; 
  85.  default: 
  86. imagepng($img); 
  87. break; 
  88. } 
  89.  
  90. imagedestroy($img);
  91. ?>


odwolujesz sie do niego np <img src="obrazek.php" alt="captcha" />

a sprawdzasz kod wyslany w formularzu za pomoca
  1. <?php
  2. if($_SESSION['token'] == $_POST['kod_z_obrazka']){
  3. echo 'OK';
  4. }else{
  5. echo 'zly kod';
  6. }
  7. ?>
kamil6e
nic nie muszę dodawać do tego kodu całego formularza ?

a gdzie wstawić w formularzu:

  1. <?php
  2. if($_SESSION['token'] == $_POST['kod_z_obrazka']){
  3. echo 'OK';
  4. }else{
  5. echo 'zly kod';
  6. }
  7. ?>
klocu
pomysl - zeby działało musisz miec pole do którego wpiszesz odczytany token i obrazek ktory Ci go pokaze. jak nie wkleisz to gdzie chcesz zawrzec zabezpieczenia?

a kodu ktory napisales nie wpisujesz do formularza tylko do kodu ktory weryfikuje wprowadzone dane i obrabia je dalej. pomysl logicznie tylko jak to polaczyc z Twoim kodem zeby jedno wspolgralo z drugim i nie wylatywalo z kosmosu...
kamil6e
Mi raczej trudno będzie się połapać, bo nie jestem do końca zapoznany z php i dlatego napisałem tutaj na forum o pomoc.
intol
Jeżeli jesteś mało obeznany w PHP, zrób token np. JS (musisz znaleźć informację o tym w sieci). Będzie ci łatwiej, efekt podobny.
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.