Autor Zpráva
Zarath
Profil *
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 *
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 *
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
[#4] nevimco
To je jen otázka toho, kolik času je někdo ochotný strávit tvorbou spambota. [#3] pro menší weby, [#4] pro větší weby, co bylo v jednu dobu na rapidshare každý ví.
Zarath
Profil *
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: