Autor | Zpráva | ||
---|---|---|---|
Zarath Profil * |
#1 · Zasláno: 2. 9. 2012, 03:52:29
Zdravím,
rád bych vás požádal o pomoc s kontrolou a případnou úpravou PHP kódu. Pročítal jsem několik různých fór i článků zabývajících se antispamovou ochranou pro návštěvní knihu a mail form. Snažil jsem se přidat neviditelné pole, které pokud je vyplněno, formulář se neodešle. Spamovou vlnu to bohužel nezastavilo jen to zredukovalo počet na polovinu. Prosím o pomoc. Návštěvní kniha: <?php if($_POST['fred'] != "") { echo('<p style="color: #8B2323; font-size: 16px; font-weight: bold;">Buď používáte textové prohlížení nebo jste spambot. Omlouváme se, ale Vaše zpráva nebude odeslána!</p>'); } $jmeno = $_POST['jmeno']; $email = $_POST['email']; $web = $_POST['web']; $zprava = $_POST['zprava']; $ip=$_SERVER['REMOTE_ADDR']; $jmeno=HTMLSpecialChars($jmeno); $email=HTMLSpecialChars($email); $web=HTMLSpecialChars($web); $zprava=HTMLSpecialChars($zprava); $jmeno=stripslashes($jmeno); $email=stripslashes($email); $web=stripslashes($web); $zprava=stripslashes($zprava); $zprava = str_replace("\n"," <br /> ", $zprava); $zprava = substr($zprava, 0, 10000); $email_celek=" | <a href='mailto:$email'>$email</a>"; $web_celek=" | <a href='$web'>$web</a>"; $ip_celek=" (IP:$ip)"; if ($web=="http://"){$web_celek="";} if ($email==""){$email_celek="";} if ($zprava!="" and $jmeno!=""){ $celek="<p>Zprávu poslal <strong>$jmeno</strong>$email_celek $web_celek $ip_celek</p><p>$zprava</p><hr>"; $nacte = fopen ('data.inc','r'); $puvodni_data = FRead ($nacte, FileSize ('data.inc')); fclose ($nacte); //zavře soubor $komplet = $celek.$puvodni_data; $soubor = fopen('data.inc', 'w'); fwrite ($soubor, $komplet); fclose ($soubor); } include "data.inc"; ?> Mailový formulář: <?php if($_POST['fred'] != "") { echo('<p style="color: #8B2323; font-size: 16px; font-weight: bold;">Buď používáte textové prohlížení nebo jste spambot. Omlouváme se, ale Vaše zpráva nebude odeslána!</p>'); } else { if(isset($_POST['name'])) { if(($_POST['name'] == "") or ($_POST['email'] == "") or ($_POST['message'] == "")) { echo('<p style="color: #8B2323; font-size: 16px; font-weight: bold;">Prosíme vyplňte všechny pole</p>'); } else { $name = $_POST['name']; $email = $_POST['email']; $formmessage = ($_POST['message']); $emailmessage = "Zpráva z webového formuláře. Jméno: $name Email: $email Zpráva: $formmessage "; $to = "quercus-music@email.cz"; $subject = "Předmět zprávy:"; $headers = "Od: $email"; if(isset($name)) { mail($to,$subject,$emailmessage,$headers); } } } } ?> <?php if(isset($name)) { echo('<p style="color: #8B2323; font-size: 15px; font-weight: bold;">Váše zpráva byla úspěšně odeslána. Děkujeme!</p>'); } ?> |
||
Giga Profil * |
#2 · Zasláno: 2. 9. 2012, 07:59:06
Asi nestačí len jeden test, či sa jedná o spam...
Mne sa osvedčilo časové razítko, keď sa čas zobrazenia formuláru porovná s časom odoslania. Ak je tento čas príliš krátky na to, aby ho človek vyplnil (napr. menej ako 10 sekúnd), tak sa jedná o spam a príspevok končí v koši. Určite by som spambota neinformoval o tom, že jeho správa bude ignorovaná. Skôr by som užívateľov upozornil, aby políčko nechali prázdne. |
||
Rellik Profil |
Já mám na jednom webu pouze kolonku pro vyplnění jednoho čísla a funguje zatím 100%
prostě input: Napište číslo tři: |__________| Pokud není vyplněno nebo tam někdo nenapíše 3, tak se form neodešle. Proč to řešit nějak složitě, když to jde celkem jednoduše... ;-) |
||
nevimco Profil * |
#4 · Zasláno: 2. 9. 2012, 18:22:44
Rellik: To by se dalo obejít. Pokud je to tam uvedené takto tak stačí do spambota doplnit aby toto vyplnil.
Já to vyřešil tak že jsem vytvořil pár obrázků (cca. 30) na kterých byly různé tvary a barvy a potom pouze vygeneroval otázky a zprávnou odpověď a uživatel měl vybrat z těch tří :D |
||
Alphard Profil |
#5 · Zasláno: 2. 9. 2012, 20:06:14
|
||
Časová prodleva: 7 dní
|
|||
Zarath Profil * |
#6 · Zasláno: 9. 9. 2012, 15:55:16
Děkuji všem za rady.
Bohužel v návštěvní knize se mi spamy zobrazují stále. Na e-mail mi spamy, podle výše uvedených kódů, přestaly chodit, ale v návštěvní knize to nefunguje. Snažil jsem se přidat i antispamové pole s příkladem, ale nepomohlo to. Dost možná to zamezilo určitým spambotům, jelikož mi chodí úplně jiný druh, ale spam je to pořád. Jsem v PHP absolutní začátečník a řeším to stylem pokus-omyl. Pokud by byl někdo tak ochotný a napsal nebo poupravil kód byl bych velice vděčný. Každopádně děkuji. |
||
panther Profil |
#7 · Zasláno: 9. 9. 2012, 15:59:38
Zarath:
odeslání formuláře návštěvní knihy je technicky stejné jako odeslání formuláře, který následně směřuje na mail. Funguje-li ti jedna ochrana a druhá ne, máš někde chybu (bez znalosti obou kódů nelze říci kde). Nebo ti spamy chodí i na mail, ale jsou filtrovány mailovým klientem a odesílány do spamkoše? |
||
Šéva Profil |
#8 · Zasláno: 11. 9. 2012, 09:08:12
Zarath:
já to řeším pomocí CAPTCHA obrázků, případně by se to dalo udělat jak již bylo zmíněno porovnáváním časů a to tak, že si do $_SESSION nastavíš aktuální čas, kdy napsal první znak do první kolonky a po odeslání formuláře to porovnáš s aktuálním časem a když bude rozdíl menší než XX sekund, příspěvek prostě zahodíš nebo uložíš do tabulky pro spam, kterou ale po čase doporučuji promazávat. |
||
Časová prodleva: 12 let
|
0