Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno spam z webovyho formulare

dneska mi prisel mail od webhostingu, ze z webu pres kontaktni formular nekdo odesila spam
podle toho co mi poslaly, tak to vypada, ze si nejak doplni bcc s adresami

a vubec netusim jak, jediny co me napada, je, ze nejak do input="text" dostane \n, coz moc netusim jak by to bylo mozny

tady skript, kterej to zpracovava

        $mail_text = "Jméno: {$_POST['jmeno']} \n";
        $mail_text .= "Telefon: {$_POST['telefon']} \n";
        $mail_text .= "Email: {$_POST['email']} \n\n";
        $mail_text .= $_POST['vzkaz'];
        $from = 'example.com <kontakt@example.com>';
        $mail_predmet = "Vzkaz: {$_POST['predmet']}";
        $mail_headers = "MIME-Version: 1.0\n";
        $mail_headers .= "Content-type: text/plain; charset=\"windows-1250\"\n";
        $mail_headers .= "From: $from\r\n";
        if ( $_POST['email'] ) $mail_headers .= "Reply-To:{$_POST['email']}\n";

        if ( mail("info@example.com", $mail_predmet, $mail_text, $mail_headers) )
    }

diky za rady

Předmět Autor Datum
http://example.com/mail.php?body=jipikaje&email=spa m@fakedomain.com%0Abcc:spam-1@somedomain.com,spa…
xy 04.12.2006 15:42
xy
Chybka v řádku: contains_bad_str(body); //namísto: //toto: contains_bad_str($body);…
Flash_Gordon 04.12.2006 18:37
Flash_Gordon
dik, hlavne za contains_newlines()
foltyn 04.12.2006 22:33
foltyn
Já mám ve formuláři lidem neviditelné pole. hloupý robot jej samozřejmě vidí, něco tam vyplní a ve z… poslední
Kráťa 05.12.2006 00:48
Kráťa

http://example.com/mail.php?body=jipikaje&email=spa m@fakedomain.com%0Abcc:spam-1@somedomain.com,spam2@s omedomain.com

mozne riesenie:

<?php
$to      = "info@example.com";
$subject = $_REQUEST["subject"];
$body = $_REQUEST["body"];
$email = $_REQUEST["email"];

$dodgy_strings = array(
                "content-type:"
                ,"mime-version:"
                ,"multipart/mixed"
                ,"bcc:"
);

function is_valid_email($email) {
  return preg_match('#^[a-z0-9.!\#$%&\'*+-/=?^_`{|}~]+@([0-9.]+|([^\s]+\.+[a-z]{2,6}))$#si', $email);
}

function contains_bad_str($str_to_test) {
  $bad_strings = array(
                "content-type:"
                ,"mime-version:"
                ,"multipart/mixed"
		,"Content-Transfer-Encoding:" 
                ,"bcc:"
		,"cc:"
		,"to:"
  );
  
  foreach($bad_strings as $bad_string) {
    if(eregi($bad_string, strtolower($str_to_test))) {
      echo "$bad_string found. Suspected injection attempt - mail not being sent.";
      exit;
    }
  }
}

function contains_newlines($str_to_test) {
   if(preg_match("/(%0A|%0D|\\n+|\\r+)/i", $str_to_test) != 0) {
     echo "newline found in $str_to_test. Suspected injection attempt - mail not being sent.";
     exit;
   }
} 

if($_SERVER['REQUEST_METHOD'] != "POST"){
   echo("Unauthorized attempt to access page.");
   exit;
}

if (!is_valid_email($email)) {
  echo 'Invalid email submitted - mail not being sent.';
  exit;
}

contains_bad_str($email);
contains_bad_str($subject);
contains_bad_str(body);

contains_newlines($email);
contains_newlines($subject);

$header s = "From: $email";
mail($to, $subject, $body, $headers);
echo "Thanks for submitting.";
?>

[mod]doplnený tag pre kód (los)[/mod]

Já mám ve formuláři lidem neviditelné pole. hloupý robot jej samozřejmě vidí, něco tam vyplní a ve zpracování je podmínka, že pokud v tom poli něco je, neodešle se formulář.
Není to můj nápad a hodně mi s tím PHP pomohl virus z této poradny.
K vidění je to na
zprava.html
to "neviditelné" pole je mezi textareou a tlačítkem na odeslání. Zkuste si do toho místa kliknou, něco napsata odeslat.

Mám to asi půl roku a za tu dobu žádný SPAM nedorazil.
Ale ne, že si z toho uděláte další software hádanku, nebo tak něco a bude mi chodit denně 1 000 nesmyslů. To bych vám neřekl nic nového o ježkovi. :-)

Zpět do poradny Odpovědět na původní otázku Nahoru