Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów
Jak zabezpieczyć formularz kontaktowy przed spam - Wersja do druku

+- Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów (https://www.webmastertalk.pl)
+-- Dział: Technologie internetowe - tworzenie stron WWW (https://www.webmastertalk.pl/forum-technologie-internetowe-tworzenie-stron-www)
+--- Dział: xHTML, CSS, JavaScript (https://www.webmastertalk.pl/forum-xhtml-css-javascript)
+--- Wątek: Jak zabezpieczyć formularz kontaktowy przed spam (/thread-jak-zabezpieczyc-formularz-kontaktowy-przed-spam)



Jak zabezpieczyć formularz kontaktowy przed spam - rafciorb - 28-11-2010

Witam. Na dole mam formularz kontaktowy i chciałbym zrobić zabezpieczenie spamowe, ale nie wiem jak. Proszę o pomoc

Kod PHP:
<?php 
    
// sprawdzamy, czy zmienna $submit jest pusta 
    
if (empty($_POST['submit'])) { 
    
// wy_wietlamy formularz 
    
echo "<table border=\"0\"><form method=\"post\"> 
    <tr> 
    <td><span style=\"color: #000; font-size: 10pt; text-align: center;\">Treść wiadomości</td> 
    <td><textarea name=\"tresc\" style=\"width: 250px; height: 100px\"></textarea></td> 
    </tr> 
    <tr> 
    <td><span style=\"color: #000; font-size: 10pt; text-align: center;\">Imię, nazwisko</td> 
    <td><input type=\"text\" name=\"imie\" style=\"width: 250px\"></td> 
    </tr> 
    <tr> 
    <td><span style=\"color: #000; font-size: 10pt; text-align: center;\">Adres e-mail</td> 
    <td><input type=\"text\" name=\"email\" style=\"width: 250px\"></td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\">&nbsp; 
    </tr> 
    </table>"


        
    
// sprawdzamy, czy zmienne przesłane z formularza nie są puste 
    
elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) { 
    
// jeżeli powyższy warunek jest spełniony tworzona jest wiadomo_ć 
    // zmienna $message zawiera tre_ć wiadomo_ci 
    
$message "Tre¶ć wiadomo¶ci:\n$_POST[tresc]\nWysłał: $_POST[imie]\ne-mail: $_POST[email]"
    
// zmienna $header zawiera przede wszystkim adres zwrotny 
    
$header "From: $_POST[imie] <$_POST[email]>"
    
// funkcja mail() za pomocą której wiadomo_ć zostanie wysłana 
    
@mail("adres e-mail","Wiadomosc ze strony WWW ","$message","$header"
    or die(
'Nie udało się wysłać wiadomości'); 
    echo 
"<br><br><span style=\"color: #FF0000; text-align:center; font-size: 12pt;\"><strong>Wiadomość została wysłana poprawnie!</strong><br><br><br>"
        echo 
"<br><br><Br><br><br><span style=\"color: #FF0000; text-align:center; font-size: 12pt;\"><strong>Dzięki za wysłanie wiadomośći</strong><br><br><br>"
}    
        else echo 
"<br><br><br><br><br><span style=\"color: #FF0000; text-align:center; font-size: 12pt;\">Wypełnij wszystkie pola formularza!</span><br><br><br><br><br><br><br>"

?>



RE: Jak zabezpieczyć formularz kontaktowy przed spam - Pedro84 - 28-11-2010

Captcha? W Google znajdziesz.


RE: Jak zabezpieczyć formularz kontaktowy przed spam - Bartekbtm - 04-12-2010

no tak, "przyjaciel forum" pomógł. omg.

co do kodu, specem nie jestem, ale funkcja empty nie wiem czy odpowiednio sie nadaje. zdaje sie że można wprowadzić znaki których byśmy nie chcieli. Poleciłbym raczej zapoznać się z funkcją eregi, poza tym dołączyć captcha tak jak wyżej napisano :] ewentualnie, jak to na niektórych stronach/forach proste działanie które po sprawdzeniu poprawności przekieruje dalej.


RE: Jak zabezpieczyć formularz kontaktowy przed spam - Pedro84 - 04-12-2010

(04-12-2010, 00:12)Bartekbtm napisał(a): no tak, "przyjaciel forum" pomógł. omg.

co do kodu, specem nie jestem, ale funkcja empty nie wiem czy odpowiednio sie nadaje. zdaje sie że można wprowadzić znaki których byśmy nie chcieli. Poleciłbym raczej zapoznać się z funkcją eregi, poza tym dołączyć captcha tak jak wyżej napisano :] ewentualnie, jak to na niektórych stronach/forach proste działanie które po sprawdzeniu poprawności przekieruje dalej.
1. To już umiejętności szukania posiadać nie trzeba? Phi. W Google są miliony przykładów, tipsów, etc.
2. Eregi jest zdeprecjonowane. Jak już coś to wyrażenia, ale...do czego?
3. Przeczytaj sobie Mistrzu co to w ogóle jest captcha: http://pl.wikipedia.org/wiki/CAPTCHA (masz link, żebyś nawet szukać nie musiał, to przecież trudne i myślenia wymaga).

Smile


RE: Jak zabezpieczyć formularz kontaktowy przed spam - Bartekbtm - 04-12-2010

Mistrzu, więc uzasadnij mi po co są fora, i po co ludzie zadają na nich pytania skoro mogą sobie wszystko znaleźć w google?

Eregi zamiast empty dlatego że można ładnie określić akceptowane znaki, poza tym odnosiło się to do całości kodu, nie tylko prośby. o ludzie.


RE: Jak zabezpieczyć formularz kontaktowy przed spam - Kartofelek - 04-12-2010

Poczytaj jak stworzyć sobie obrazek w GI php i jak na niego nanieść jakiś ciąg znaków. Reszty się domyślisz.


RE: Jak zabezpieczyć formularz kontaktowy przed spam - Engine - 04-12-2010

Gotowe rozwiązanie:

Klucze i paczkę do pobrania uzyskasz po tu:
http://www.google.com/recaptcha

Kod:
<form action="" method="post" name="formularz">
    <div>
      <table class="krow_table_1">
        <tr>
          <td class="krow_td_1">Imię:</td>
          <td class="krow_td_2"><input type="text" name="imie" size="30" maxlength="30" value="" /></td>
        </tr>
        <tr>
          <td class="krow_td_1">E-mail:</td>
          <td class="krow_td_2"><input type="text" name="mail" size="30" maxlength="30" value="" /></td>
        </tr>
        <tr>
          <td class="krow_td_1">Wiadomość:</td>
          <td class="krow_td_2"><textarea name="wiadomosc" rows="10" cols="50" /></textarea></td>
        </tr>
        <tr>
          <td class="krow_td_1">&nbsp;</td>
          <td class="krow_td_2"><?php
@require_once('recaptcha/recaptchalib.php');
$klucz_publiczny = "xxx";
$klucz_prywatny = "xxx";

$odp = null;
$blad = null;

if ($_POST["wyslij"]) {
$odp = recaptcha_check_answer ($klucz_prywatny,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);

if ($odp->is_valid) {
$headers = "From: " . $_POST["imie"] ."<". $_POST["mail"] .">"."\r\n";
$headers .= "Reply-To: " . $_POST["mail"] . "\r\n";
$headers .= "Return-path: " . $_POST["mail"];

$do="[email protected]";
$temat="Temat wiadomości";
$tresc="

Imię: " .$_POST["imie"] . "\n
E-mail: " .$_POST["mail"] . "\n
Wiadomość: " .$_POST["wiadomosc"] . "\n";

mail($do,$temat,$tresc,$headers);
echo "<strong>Wiadomość została wysłana.</strong>";
exit(1);
} else {
echo "<span style=\"color:#FF0000;\">Proszę poprawnie rozwiązać test CAPTCHA. Wiadomość nie została wysłana.</span>";
}
}
echo recaptcha_get_html($klucz_publiczny, $blad);
?>
          <td/>
        </tr>
        <tr>
          <td class="krow_td_1">&nbsp;</td>
          <td class="krow_td_2"><input type="submit" name="wyslij" value="Wyślij" /> <input type="reset" value="Wyczyść" alt="Wyczyść formularz kontaktowy" /></td>
        </tr>
      </table>
    </div>
  </form>