Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wprowadź kod z obrazka...
Forum PHP.pl > Forum > Przedszkole
Sublove
Ma swojej stronie mam możliwość wysyłania maila przez internatutów, chciałbym wstawić powszechnie znany patent chroniący przez atakiem automatów wysyłających złośliwie duże ilości maile. Miannowicie pole: przepisz kod z obrazka.
Jak to zrobić?
nospor
kurcze.... poczytaj o CAPTCHA a dowiesz sie jak to zrobic. Znajdziesz tez mase kodow
seba22
Ja polecam TO:

http://recaptcha.net/learnmore.html

Do mniej ważnych spraw używam http://www.phpcaptcha.org/

ale do tych ważniejszych czyli rejestracja, to jednak polecam http://recaptcha.net/learnmore.html
moim zdaniem jest trudniejsze, a co za tym idzie bardziej efektowne.

Jak pobierzesz kod recaptacha, to masz przykłady implementacji. wliczając w to aplikacje oparte na PHP, więc swój formularz zabezpieczysz w ciągu nie wiem, maksymalnie 10 minut ?.
c3zi
Ukryte pole + sprawdzenie czy automat wstawił tam jakąś wartość nie wystarczy ?
Pytam, ponieważ strasznie nie lubię tego typu zabezp. Często są bardziej uciążliwe dla użytkownika niż dla bota ...
Sublove
Próbowałem zaimplementować CAPCHA do swojego formularza ale poległem:
Caly czas mam komunikat:
Notice: Undefined index: captcha in D:\wamp\www\kontakt.php on line 46

może źle zrozumiałem instrukcję: http://www.encaps.net/software/php-captcha/

Nie wiem... gdzie robię błąd?

  1. Skontaktuj się z nami za pomocą poniższego formularza, odpiszemy do Ciebie.
  2. <form  method="POST">
  3. <table>
  4.  <tr><td><input name="imienad" type=text> Twoje imię</td></tr>
  5.  <tr><td><input name="mailnad" type=text> Twój e-mail</td></tr>
  6.  <tr><td height="4"></td></tr>
  7.  <tr><td>Wiadomość</td></tr>
  8.  <tr><td><textarea name="tresc" cols="50" rows="5"></textarea></td></tr>
  9.  <tr><td align="center">CAPTCHA:<br>
  10.    (antispam code, 3 black symbols)<br>
  11.    <table><tr><td><img src="captcha.php" alt="captcha image"></td>
  12.    <td><input type="text" name="captcha" size="3" maxlength="3"></td></tr></table>
  13.  
  14.  <tr><td><input type="submit" name="wyslij" value="Wyślij"></td></tr>
  15. </table>
  16. </form>
  17.  
  18. <?php
  19. if (isset($_POST['wyslij']) && $_POST['wyslij'] == 'Wyślij') {
  20.  
  21. if(isset($_POST["captcha"]))
  22. if($_SESSION["captcha"]==$_POST["captcha"])
  23. {
  24.    
  25. $Name=$_POST["imienad"];
  26. $email=$_POST['mailnad'];
  27. $recipient="[email="tomczak@gandalf.mac.edu.pl"]tomczak@gandalf.mac.edu.pl[/email]";  
  28. $mail_body=$_POST['tresc'];
  29. $subject="Zapytanie ze strony www";
  30.  
  31. if(empty($Name) OR empty($email) OR empty($mail_body))
  32. {
  33. printf ("<a id='err'><b>Błąd wprowadzania!</b></a><br/>");
  34. echo'Upewnij się czy wypełniłeś wszystkie pola...';
  35. } else {
  36. $pos1 = strpos($email, [email=""]'@'[/email]);
  37. $pos2 = strpos($email, '.');
  38. if (($pos1 === false) OR ($pos2 === false))
  39. {
  40. printf ("<a id='err'><b>Błąd wprowadzania!</b></a><br/>");
  41. echo 'Sprawdź adres email...';
  42. } else {
  43. printf ("<a id='inf'><b>Wiadomość wysłana, dziękujemy!</b></a><br/>");
  44.  
  45. $header = "From: ". $Name . " <" . $email . ">r\n";
  46. $header .= "Content-type: text/html; charset=iso-8859-2r\n";
  47. $header .= "Content-Transfer-Encoding: 8bitr\n ";
  48.  
  49. if($_SESSION["captcha"]==$_POST["captcha"])
  50. {
  51.  
  52. mail($recipient, $subject, $mail_body, $header);
  53. }
  54. }
  55. }
  56. }
  57.  
  58.  
  59.  
  60.  
  61. else
  62. {
  63.    echo 'CAPTCHA is not valid; ignore submission';
  64. }
  65. }
  66. ?>




Cytat(c3zi @ 28.01.2009, 12:18:35 ) *
Ukryte pole + sprawdzenie czy automat wstawił tam jakąś wartość nie wystarczy ?
Pytam, ponieważ strasznie nie lubię tego typu zabezp. Często są bardziej uciążliwe dla użytkownika niż dla bota ...



w stylu hidden do formularza....? Ale nierozumiem. Czy uzytkownk musiałby zawsze wpisywać wartość tego pola żeby wysłać maila?
seba22
1)

Uruchom obsługę sesji na początku skryptu
.
  1. <?php
  2. ?>


To bym dał od razu pod,
  1. <?php
  2. else
  3. {
  4.   echo 'CAPTCHA is not valid; ignore submission';
  5. }
  6. ?>



  1. <?php
  2. if($_SESSION["captcha"]==$_POST["captcha"])
  3. {
  4.  
  5. mail($recipient, $subject, $mail_body, $header);
  6. }
  7. ?>


Jeżeli jest poprawna -> wyślij mail, jeżeli NIE -> wywal komunikat.



Zabezpieczenie kolegi, przypomina raczej ochronę przed csrf.
Biblioteką curla, można rozłożyć takie zabezpieczenie.
Sublove
tak zrobiłem i nie bangla sad.gif
seba22
Głupio że się muszę o to pytać, ale co wypluwa...

I pokaż w którym miejscu masz ten ERROR.
Sublove
23 wiersz w zamieszczonym przeze mnie kodzie (23 wiersz w bbcode)
komunikat zamieściłem w poprzednim poście sad.gif
erix
A czy Ty prawidłowo startujesz sesję? I we wszystkich plikach?

Daj gdzieś var_dump" title="Zobacz w manualu PHP" target="_manual na tablicę sesyjną; sprawdź, czy wszędzie są takie same identyfikatory (odpowiednie ciacho w przeglądarce).
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.