Spam w formularzu Mailowym

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
julss
Nowy
Nowy
Posty: 30
Rejestracja: czw lis 03, 2005 1:07 pm

Spam w formularzu Mailowym

Post autor: julss »

Witam! Ostatnio zalozylam formularz mailowy i oczywiscie jako pierwsze zglosily sie "bot-y" (tak sie to nazywa?). Czyli jakies Spamowe adresy mailowe sie zglosily. Czy ktos cos o nich wie? Moze macie jakiegos linka w rekawie? Chetnie poczytam sobie jak sie tego robactwa pozbyc... i przede wszystkim czy formularzy we flashu tez sie czepiaja.
atom
Nowy
Nowy
Posty: 145
Rejestracja: wt gru 20, 2005 1:55 pm
Kontakt:

Re: Spam w formularzu Mailowym

Post autor: atom »

Możesz utrudnić botom życie, wymagając np. wypełnienia w formularzu kontaktowym kodu przepisanego z obrazka - podobne jak zabezpieczane są np. bramki sms-owe.
Krzysztof Aszkiełowicz
Zaczyna działać
Zaczyna działać
Posty: 458
Rejestracja: pn maja 26, 2003 9:29 pm
Lokalizacja: Warszawa
Kontakt:

Re: Spam w formularzu Mailowym

Post autor: Krzysztof Aszkiełowicz »

poszukaj o captcha

możliwości są 2:
a) wyświetlanie obrazka z kodem
b) wpisywanie wyniku jakiegoś generowanego działania arytmetycznego, np: 2+4 (musi wpisać 6), 9-4 (musi wpisać 5)

na stronie obsługującej formularz musisz to oczywiście sprawdzić czy było poprawnie wpisane, do tego przydadzą Ci się sesje lub cookies.
max_mcee
Posty: 13
Rejestracja: czw sty 05, 2006 9:28 pm
Kontakt:

Re: Spam w formularzu Mailowym

Post autor: max_mcee »

Ja znalazłem rozwiązanie :)

Formularz kontaktowy z generowanym hasłem. Roboty jak dotąd są za głupie żeby to złamać ;)

[php]<?php
session_register("regKey");
session_start();
session_name("regKey");
?>


<p><strong>Formularz kontaktowy:</strong></p>
<?
if($_POST[whatdo]!=send OR !$_POST[nazwa] OR !$_POST[email] OR !$_POST[tresc] OR !$_POST[telefon] OR !preg_match('|^[_a-z0-9.-]*[a-z0-9]@[_a-z0-9.-]*[a-z0-9].[a-z]{2,3}$|e', $_POST[email]) OR $_POST[acode]!=$_SESSION[actCode])
{
?>

<? if(!preg_match('|^[_a-z0-9.-]*[a-z0-9]@[_a-z0-9.-]*[a-z0-9].[a-z]{2,3}$|e', $_POST[email]) AND $_POST[whatdo]==send) { $color1 = 'background:#FF9D00;'; } ?>

<? if(!$_POST[nazwa] AND $_POST[whatdo]==send) { $color2 = 'background:#FF9D00;'; } ?>

<? if(!$_POST[tresc] AND $_POST[whatdo]==send) { $color3 = 'background:#FF9D00;'; } ?>

<? if(!$_POST[email] AND $_POST[whatdo]==send) { $color1 = 'background:#FF9D00;'; } ?>

<? if(!$_POST[telefon] AND $_POST[whatdo]==send) { $color4 = 'background:#FF9D00;'; } ?>

<? if($_POST[acode]!=$_SESSION[actCode] AND $_POST[whatdo]==send) { $color5 = 'background:#FF9D00;'; } ?>
<?
function generuj_haslo()
{
global $haslo;

$ile_liter = 5;
$litery = 'abcdefghijklmnoABCDEFGH0123456789123456';

srand((double)microtime()*1000000);

$haslo = ''; // Ustawienie pocz±tkowe hasła
for ($i=0;$i<$ile_liter;$i++)
{ $haslo .= substr($litery,(rand()%(strlen($litery))),1); };
};
generuj_haslo();


$_SESSION[actCode] = $haslo;

?>

<form action="" method="POST">
<input type="hidden" name="whatdo" value="send">

<div align="left">
<table border="0" cellpasing="1" cellpadding="1">
<tr>
<td valign="middle">ImiÄ™ i nazwisko: </td>
<td valign="middle"><input type="text" name="nazwa" style="<? echo $color3; ?>" value="<? echo $_POST[nazwa]; ?>">*</td>
</tr>

<tr>
<td valign="middle">Adres: </td>
<td valign="middle"><textarea name="adres"><? echo $_POST[adres]; ?></textarea></td>
</tr>

<tr>
<td valign="middle">E-mail: </td>
<td valign="middle"><input type="text" name="email" style="<? echo $color1; ?>" value="<? echo $_POST[email]; ?>">*</td>
</tr>

<tr>
<td valign="middle">Nr telefonu: </td>
<td valign="middle"><input type="text" name="telefon" style="<? echo $color4; ?>" value="<? echo $_POST[telefon]; ?>">*</td>
</tr>

<tr>
<td valign="middle">Treść: </td>
<td valign="middle" ><textarea name="tresc" style="<? echo $color2; ?>"><? echo $_POST[tresc]; ?></textarea>*</td>
</tr>

<tr>
<td valign="middle">Kod weryfikacyjny: </td>
<td valign="middle"><b><? echo $haslo; ?></b> Wpisz kod: <input type="text" name="acode" style="<? echo $color5; ?> width:75px;" value="<? echo $_POST[acode]; ?>">*</td>
</tr>

<tr>
<td valign="middle">*-pola obowiÄ…zkowe </td>
</tr>


</table>

<table border="0" cellpasing="1" cellpadding="1">
<tr>
<td valign="middle"><input type="submit" value="wyslij"></td>
<td valign="middle"><input type="reset" value="kasuj"></td>
</tr>
</table>
</div>
</form>

<?
}
else
{
if(@mail("[email protected]", "Wiadomość z serwisu", "

ImiÄ™ i nazwisko: $_POST[nazwa]
Telefon: $_POST[telefon]
E-mail: $_POST[email]

Adres:
$_POST[adres]

----------------
Tresc:

$_POST[tresc]

----------------

",
"From: $_POST[email] <$_POST[email]>
MIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-2\nReply-To: $_POST[email]\n"))

{
echo '<br><br><strong>TwĂłj e-mail znajdujÄ™ siÄ™ juĹĽ w skrzynce odbiorcy</strong>';
}
else
{
echo 'Co¶ poszło nie tak. Ponów próbę!';
}
}

?>[/php]
ODPOWIEDZ