Avatar billede noidem Nybegynder
03. november 2006 - 15:30 Der er 15 kommentarer og
1 løsning

Træt af spam i min mailsender.

Hej

Hvordan redde jeg min mailsender(PHP) fra at blive lukket som følge af store mængder spam fra spammere som abc123

PHP-file:
*******************************************
<form name="mailsender" action="send.php" method="post"><script language="JavaScript" type="text/javascript">
function confirm_submit()
{
error = 0;
placering=0;
tekst=(document.mailsender.sender.value).toLowerCase();
placering=tekst.indexOf("@");
if(tekst ==""){
alert ("Angiv en gyldig afsender email!");
error = 1;
} else {
tegn=tekst.indexOf(" ");
if(tegn!=-1){
alert ("Angiv en gyldig afsender email!");
error = 1;
} else {
if (tekst.indexOf("æ")!=-1 || tekst.indexOf("ø")!=-1 || tekst.indexOf("å")!=-1 ||
tekst.indexOf("Æ")!=-1 || tekst.indexOf("Ø")!=-1 || tekst.indexOf("Å")!=-1 ||
tekst.indexOf(";")!=-1 || tekst.indexOf(",")!=-1){
alert ("Der er ikke nogle adresser der indeholder: æ ø å Æ Ø Å");
error = 1;
} else {
if (placering<1 || tekst.length<=(placering+1)){
alert ("Angiv en gyldig afsender email!");
error = 1;
}
}
}
}
placering=0;
tekst=(document.mailsender.email.value).toLowerCase();
placering=tekst.indexOf("@");
if(tekst ==""){
alert ("Angiv en gyldig modtager email!");
error = 1;
} else {
tegn=tekst.indexOf(" ");
if(tegn!=-1){
alert ("Angiv en gyldig modtager email!");
error = 1;
} else {
if (tekst.indexOf("æ")!=-1 || tekst.indexOf("ø")!=-1 || tekst.indexOf("å")!=-1 ||
tekst.indexOf("Æ")!=-1 || tekst.indexOf("Ø")!=-1 || tekst.indexOf("Å")!=-1 ||
tekst.indexOf(";")!=-1 || tekst.indexOf(",")!=-1){
alert ("Der er ulovlige tegn i adressen. Må ikke indeholde: æ ø å Æ Ø Å , ;");
error = 1;
} else {
if (placering<1 || tekst.length<=(placering+1)){
alert ("Angiv en gyldig modtager email!");
error = 1;
}
}
}
}
if(error == 0)
document.mailsender.submit();
}
</script>Mail-adresse<br><input name="sender" value="" size="67" type="text"><br><br>Besked<br>
<textarea name="besked" rows="8" cols="50"></textarea><br><br><font color="#000000" face="verdana" size="2"><input onclick="confirm_submit()" value="Send" type="button"><input readonly="readonly" value="xxxxx@xx.dk" name="email" size="0" style="border-style: solid; border-color: rgb(0, 0, 0); background: black none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"></font></form>
*******************************************

send.php
*******************************************
<?
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#000000" text="#FFFFFF">
<center><br><br><h1>Tak for din henvendelse.<br>Jeg vender tilbage så hurtigt som muligt.</h1><br><br><i>
Med venlig hilsen<br>Ulla</center>

<?
if (isset($_POST['email'])) {
    $sender = $_POST['sender'];
    $email = $_POST['email'];
    $sub = 'Fra hjemmeside';
    $url = $_SESSION['link'];
    $besked = $_POST['besked']."\n".$url;
    $header = "From: ".$sender."\n";
    $header .= "Reply-To: ".$sender."\n";
    mail($email, $sub, $besked, $header);
}
?>
<?
?>
*******************************************

På forhånd 1000 tak

Mvh
Ulla
Avatar billede coderdk Praktikant
03. november 2006 - 16:00 #1
Baseret på http://www.eksperten.dk/artikler/1019

Din nye PHP-fil:

<?php

    session_start();
   
    function outputImage()
    {
        // Denne funktion skriver et billede til browseren
        header( 'Content-Type: image/png' );
        $im = imagecreate( 60, 20 );
        // Baggrundsfarven
        $bgcol = imagecolorallocate( $im, 255, 255, 255 );
        // Rammen
        $bordercol = imagecolorallocate( $im, 0, 0, 0 );
        // Tekstfarce
        $textcol = imagecolorallocate( $im, 100, 100, 220 );
        // Fyld med baggrundsfarven
        imagefill( $im, 1, 1, $bgcol );
        for ( $i = 0; $i < 4; $i++ )
        {
            // Tilfældig farve til linjerne
            $tmpCol = imagecolorallocate(
                $im, mt_rand( 100, 230), mt_rand( 100, 230), mt_rand( 100, 230) );
            // Tegn linje
            imageline( $im, 0, mt_rand( 0, 19 ), 59, mt_rand( 0, 19 ), $tmpCol );
        }
        // Skriv CAPTCHA-teksten
        imagestring( $im, 5, 9, 2, $_SESSION['captcha-code'], $textcol );
        // Wave effect
        for ( $i = 0; $i < 60; $i += 2 )
            imagecopy( $im, $im, $i - 2, sin( $i / 10 ) * 3, $i, 0, 2, 20 );
        // Tegn rammen
        imagerectangle( $im, 0, 0, 59, 19, $bordercol );
        // Smid billedet til browseren
        imagepng( $im );
        imagedestroy( $im );
        // Stop scriptet her!
        exit;
    }
   
    function newCode()
    {
        // Denne funktion laver en tekst der (som regel) kan udtales
        $vowels = array_slice( preg_split( '//', 'AEUY' ), 1, -1 );
        $nvowels = count( $vowels ) - 1;
        $consonants = array_slice( preg_split( '//', 'BCDFGHJKLMNPQRSTVWXZ' ), 1, -1 );
        $nconsonants = count( $consonants ) - 1;
        $code = "";
        $rnd = mt_rand( 0, 1 ) == 1 ? true : false;
        // Loopet herunder bygger teksten
        while ( strlen( $code ) < 5 )
        {
            $code .= ( $rnd ? $vowels[ mt_rand( 0, $nvowels ) ]
                : $consonants[ mt_rand( 0, $nconsonants ) ] );
            $rnd = !$rnd;
        }
        // Smid teksten i en sessionsvariabel
        $_SESSION['captcha-code'] = $code;
    }
   
    if ( isset( $_GET['img'] ) || isset( $_GET['newimg'] ))
    {
        if ( isset( $_GET['newimg'] ) )
        {
            // Brugeren kunne ikke læse koden, så lav en ny
            newCode();
        }
        // Vis billede
        outputImage();
        // Scriptet stopper i outputImage() - Denne kode bliver altså kun
        // kørt når der gives ?img eller ?newimg i URL'en
    }
   
    // Dan ny CAPTCHA-tekst
    newCode();

?>
<form name="mailsender" action="send.php" method="post"><script language="JavaScript" type="text/javascript">
function confirm_submit()
{
error = 0;
placering=0;
tekst=(document.mailsender.sender.value).toLowerCase();
placering=tekst.indexOf("@");
if(tekst ==""){
alert ("Angiv en gyldig afsender email!");
error = 1;
} else {
tegn=tekst.indexOf(" ");
if(tegn!=-1){
alert ("Angiv en gyldig afsender email!");
error = 1;
} else {
if (tekst.indexOf("æ")!=-1 || tekst.indexOf("ø")!=-1 || tekst.indexOf("å")!=-1 ||
tekst.indexOf("Æ")!=-1 || tekst.indexOf("Ø")!=-1 || tekst.indexOf("Å")!=-1 ||
tekst.indexOf(";")!=-1 || tekst.indexOf(",")!=-1){
alert ("Der er ikke nogle adresser der indeholder: æ ø å Æ Ø Å");
error = 1;
} else {
if (placering<1 || tekst.length<=(placering+1)){
alert ("Angiv en gyldig afsender email!");
error = 1;
}
}
}
}
placering=0;
tekst=(document.mailsender.email.value).toLowerCase();
placering=tekst.indexOf("@");
if(tekst ==""){
alert ("Angiv en gyldig modtager email!");
error = 1;
} else {
tegn=tekst.indexOf(" ");
if(tegn!=-1){
alert ("Angiv en gyldig modtager email!");
error = 1;
} else {
if (tekst.indexOf("æ")!=-1 || tekst.indexOf("ø")!=-1 || tekst.indexOf("å")!=-1 ||
tekst.indexOf("Æ")!=-1 || tekst.indexOf("Ø")!=-1 || tekst.indexOf("Å")!=-1 ||
tekst.indexOf(";")!=-1 || tekst.indexOf(",")!=-1){
alert ("Der er ulovlige tegn i adressen. Må ikke indeholde: æ ø å Æ Ø Å , ;");
error = 1;
} else {
if (placering<1 || tekst.length<=(placering+1)){
alert ("Angiv en gyldig modtager email!");
error = 1;
}
}
}
}
if(error == 0)
document.mailsender.submit();
}
    function getNewImg()
    {
        var d = new Date();
        document.getElementById('theImg').src =
            '<?= $_SERVER['PHP_SELF'] ?>?newimg&x' + d.getTime();
    }
</script>Mail-adresse<br><input name="sender" value="" size="67" type="text"><br>
    <img id="theImg" align="top" src="<?= $_SERVER['PHP_SELF'] ?>?img">
    <input type="button" value="Jeg kan ikke læse det!" onclick="getNewImg()"><br>
    Skriv bogstaverne i billedet:
    <input type="text" style="width: 60px" name="kode"><br>
    <br>Besked<br>
<textarea name="besked" rows="8" cols="50"></textarea><br><br><font color="#000000" face="verdana" size="2"><input onclick="confirm_submit()" value="Send" type="button"><input readonly="readonly" value="xxxxx@xx.dk" name="email" size="0" style="border-style: solid; border-color: rgb(0, 0, 0); background: black none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"></font></form>



din nye send.php:

<?php
        session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#000000" text="#FFFFFF">
<center><br><br><h1>Tak for din henvendelse.<br>Jeg vender tilbage så hurtigt som muligt.</h1><br><br><i>
Med venlig hilsen<br>Ulla</center>

<?
if (isset($_POST['email'])) {

    if ( !empty( $_POST['kode'] ) && strtoupper( $_POST['kode'] ) == $_SESSION['captcha-code'] )
    {
        $sender = $_POST['sender'];
        $email = $_POST['email'];
        $sub = 'Fra hjemmeside';
        $url = $_SESSION['link'];
        $besked = $_POST['besked']."\n".$url;
        $header = "From: ".$sender."\n";
        $header .= "Reply-To: ".$sender."\n";
        mail($email, $sub, $besked, $header);
    }
    else
    {
        echo "<p>Desværre, koden du skrev, var forkert. Prøv igen.</p>";
    }
}
?>
Avatar billede noidem Nybegynder
03. november 2006 - 16:47 #2
Hej coderdk

Tak for din tilbagemelding.

Men... Der er en fejl her.

Der opstod en fejl i scriptet på side i
linje: 138
Tegn: 28
Fejl: Tegnen ´;´ var ventet
Kode: 0

Her er hvad der er i linje 138:

            '<?= $_SERVER['PHP_SELF'] ?>?newimg&x' + d.getTime();


Mvh
Ulla
Avatar billede coderdk Praktikant
03. november 2006 - 17:53 #3
prøv at erstatte <?= med <?php echo
Avatar billede noidem Nybegynder
03. november 2006 - 19:48 #4
Hej coderdk

Tak igen for din tilbagemelding.

Men... Nu komme med dette:

Desværre, koden du skrev, var forkert. Prøv igen.

Ps. Har prøve ca. 20 gange.

Mvh
Ulla
Avatar billede coderdk Praktikant
03. november 2006 - 20:40 #5
Hmm er du sikker på at du ikke har noget output på en af siderne, før <?php session_start(); ?> - hvis der er bare et mellemrum virker det ikke...
Prøv lige nederst i nederst i send.php, før ?> at skrive:

echo "<pre>";
var_dump( $_SESSION );
echo "</pre>";

For det burde da virke ;)
Avatar billede noidem Nybegynder
03. november 2006 - 21:19 #6
Hej coderdk

Tak igen for din tilbagemelding.

<Hmm er du sikker på at du ikke har noget output på en af siderne, før <?php session_start(); ?> - hvis der er bare et mellemrum virker det ikke...

Svar: Det har jeg ikke.
Og dette her er sat ind i send.php

echo "<pre>";
var_dump( $_SESSION );
echo "</pre>";

Så nu komme den med dette:

Desværre, koden du skrev, var forkert. Prøv igen.

NULL



Mvh
Ulla
Avatar billede coderdk Praktikant
03. november 2006 - 21:51 #7
Hmm den fil der indeholder formularen, sætter åbenbart ikke sessionen. Hvordan ser den ud? Og er den gemt som en .php-fil?
Avatar billede noidem Nybegynder
04. november 2006 - 08:00 #8
Hej coderdk

Tak igen for din tilbagemelding.

<Og er den gemt som en .php-fil?

Svar: Ja

<Hvordan ser den ud?

Svar: testphp.php

Indhold her:
<?php

    session_start();

    function outputImage()
    {
        // Denne funktion skriver et billede til browseren
        header( 'Content-Type: image/png' );
        $im = imagecreate( 60, 20 );
        // Baggrundsfarven
        $bgcol = imagecolorallocate( $im, 255, 255, 255 );
        // Rammen
        $bordercol = imagecolorallocate( $im, 0, 0, 0 );
        // Tekstfarce
        $textcol = imagecolorallocate( $im, 100, 100, 220 );
        // Fyld med baggrundsfarven
        imagefill( $im, 1, 1, $bgcol );
        for ( $i = 0; $i < 4; $i++ )
        {
            // Tilfældig farve til linjerne
            $tmpCol = imagecolorallocate(
                $im, mt_rand( 100, 230), mt_rand( 100, 230), mt_rand( 100, 230) );
            // Tegn linje
            imageline( $im, 0, mt_rand( 0, 19 ), 59, mt_rand( 0, 19 ), $tmpCol );
        }
        // Skriv CAPTCHA-teksten
        imagestring( $im, 5, 9, 2, $_SESSION['captcha-code'], $textcol );
        // Wave effect
        for ( $i = 0; $i < 60; $i += 2 )
            imagecopy( $im, $im, $i - 2, sin( $i / 10 ) * 3, $i, 0, 2, 20 );
        // Tegn rammen
        imagerectangle( $im, 0, 0, 59, 19, $bordercol );
        // Smid billedet til browseren
        imagepng( $im );
        imagedestroy( $im );
        // Stop scriptet her!
        exit;
    }

    function newCode()
    {
        // Denne funktion laver en tekst der (som regel) kan udtales
        $vowels = array_slice( preg_split( '//', 'AEUY' ), 1, -1 );
        $nvowels = count( $vowels ) - 1;
        $consonants = array_slice( preg_split( '//', 'BCDFGHJKLMNPQRSTVWXZ' ), 1, -1 );
        $nconsonants = count( $consonants ) - 1;
        $code = "";
        $rnd = mt_rand( 0, 1 ) == 1 ? true : false;
        // Loopet herunder bygger teksten
        while ( strlen( $code ) < 5 )
        {
            $code .= ( $rnd ? $vowels[ mt_rand( 0, $nvowels ) ]
                : $consonants[ mt_rand( 0, $nconsonants ) ] );
            $rnd = !$rnd;
        }
        // Smid teksten i en sessionsvariabel
        $_SESSION['captcha-code'] = $code;
    }

    if ( isset( $_GET['img'] ) || isset( $_GET['newimg'] ))
    {
        if ( isset( $_GET['newimg'] ) )
        {
            // Brugeren kunne ikke læse koden, så lav en ny
            newCode();
        }
        // Vis billede
        outputImage();
        // Scriptet stopper i outputImage() - Denne kode bliver altså kun
        // kørt når der gives ?img eller ?newimg i URL'en
    }

    // Dan ny CAPTCHA-tekst
    newCode();

?>
<form name="mailsender" action="send.php" method="post"><script language="JavaScript" type="text/javascript">
function confirm_submit()
{
error = 0;
placering=0;
tekst=(document.mailsender.sender.value).toLowerCase();
placering=tekst.indexOf("@");
if(tekst ==""){
alert ("Angiv en gyldig afsender email!");
error = 1;
} else {
tegn=tekst.indexOf(" ");
if(tegn!=-1){
alert ("Angiv en gyldig afsender email!");
error = 1;
} else {
if (tekst.indexOf("æ")!=-1 || tekst.indexOf("ø")!=-1 || tekst.indexOf("å")!=-1 ||
tekst.indexOf("Æ")!=-1 || tekst.indexOf("Ø")!=-1 || tekst.indexOf("Å")!=-1 ||
tekst.indexOf(";")!=-1 || tekst.indexOf(",")!=-1){
alert ("Der er ikke nogle adresser der indeholder: æ ø å Æ Ø Å");
error = 1;
} else {
if (placering<1 || tekst.length<=(placering+1)){
alert ("Angiv en gyldig afsender email!");
error = 1;
}
}
}
}
placering=0;
tekst=(document.mailsender.email.value).toLowerCase();
placering=tekst.indexOf("@");
if(tekst ==""){
alert ("Angiv en gyldig modtager email!");
error = 1;
} else {
tegn=tekst.indexOf(" ");
if(tegn!=-1){
alert ("Angiv en gyldig modtager email!");
error = 1;
} else {
if (tekst.indexOf("æ")!=-1 || tekst.indexOf("ø")!=-1 || tekst.indexOf("å")!=-1 ||
tekst.indexOf("Æ")!=-1 || tekst.indexOf("Ø")!=-1 || tekst.indexOf("Å")!=-1 ||
tekst.indexOf(";")!=-1 || tekst.indexOf(",")!=-1){
alert ("Der er ulovlige tegn i adressen. Må ikke indeholde: æ ø å Æ Ø Å , ;");
error = 1;
} else {
if (placering<1 || tekst.length<=(placering+1)){
alert ("Angiv en gyldig modtager email!");
error = 1;
}
}
}
}
if(error == 0)
document.mailsender.submit();
}
    function getNewImg()
    {
        var d = new Date();
        document.getElementById('theImg').src =
            '<?= $_SERVER['PHP_SELF'] ?>?newimg&x' + d.getTime();
    }
</script>Mail-adresse<br><input name="sender" value="" size="67" type="text"><br>
    <img id="theImg" align="top" src="<?= $_SERVER['PHP_SELF'] ?>?img">
    <input type="button" value="Jeg kan ikke læse det!" onclick="getNewImg()"><br>
    Skriv bogstaverne i billedet:
    <input type="text" style="width: 60px" name="kode"><br>
    <br>Besked<br>
<textarea name="besked" rows="8" cols="50"></textarea><br><br><font color="#000000" face="verdana" size="2"><input onclick="confirm_submit()" value="Send" type="button"><input readonly="readonly" value="xxxxx@xx.dk" name="email" size="0" style="border-style: solid; border-color: rgb(0, 0, 0); background: black none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"></font></form>
Slut her:

Så er det send.php

Indhold her:
<?
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#000000" text="#FFFFFF">
<body bgcolor="#000000" text="#FFFFFF">
<center><br><br><h1>Tak for din henvendelse.<br>Jeg vender tilbage så hurtigt som muligt.</h1><br><br><i>
Med venlig hilsen<br>Ulla</center>

<?
if (isset($_POST['email'])) {

    if ( !empty( $_POST['kode'] ) && strtoupper( $_POST['kode'] ) == $_SESSION['captcha-code'] )
    {
        $sender = $_POST['sender'];
        $email = $_POST['email'];
        $sub = 'Fra hjemmeside (2)';
        $url = $_SESSION['link'];
        $besked = $_POST['besked']."\n".$url;
        $header = "From: ".$sender."\n";
        $header .= "Reply-To: ".$sender."\n";
        mail($email, $sub, $besked, $header);
    }
    else
    {
        echo "<p>Desværre, koden du skrev, var forkert. Prøv igen.</p>";
    }
}
echo "<pre>";
var_dump( $_SESSION );
echo "</pre>";
?>
Slut her:

Her er svar fra den:
Tak for din henvendelse.
Jeg vender tilbage så hurtigt som muligt.


Med venlig hilsen
Ulla
Desværre, koden du skrev, var forkert. Prøv igen.
NULL

Slut her


Mvh
Ulla
Avatar billede coderdk Praktikant
04. november 2006 - 16:55 #9
Underligt. Det lader ikke til at sessions virker... Det burde virke.
Avatar billede noidem Nybegynder
05. november 2006 - 09:50 #10
Hej coderdk

Okay. :(

mvh
Ulla
Avatar billede coderdk Praktikant
05. november 2006 - 10:03 #11
Jeg så lige du skrev:

Så er det send.php

Indhold her:
<?
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>

Du har jo glemt session_start() som jeg skrev!!:

Så er det send.php

Indhold her:
<?

  session_start();

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
Avatar billede noidem Nybegynder
05. november 2006 - 15:17 #12
Hej coderdk

DET VIRK! 1000 TAK :))

Men der komme dette på svar:

Tak for din henvendelse.
Jeg vender tilbage så hurtigt som muligt.


Med venlig hilsen
Ulla



array(1) {
  ["captcha-code"]=>
  string(5) "ZELUD"
}

Hvorfor komme det?
Kode var: ZELUD


Mvh
Ulla

Ha´ en fortsat rigtig god weekend!
Avatar billede coderdk Praktikant
05. november 2006 - 16:58 #13
Tak i lige måde! Husk lige at acceptere mit svar! ;)
Avatar billede noidem Nybegynder
05. november 2006 - 20:16 #14
Tak...

Hvorfor komme det her?
array(1) {
  ["captcha-code"]=>
  string(5) "ZELUD"
}



Mvh
Ulla
Avatar billede coderdk Praktikant
05. november 2006 - 21:35 #15
Aj ja, du skal lige fjerne:

echo "<pre>";
var_dump( $_SESSION );
echo "</pre>";

:)
Avatar billede noidem Nybegynder
06. november 2006 - 15:54 #16
Tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester