Avatar billede detail Nybegynder
11. august 2006 - 23:03 Der er 12 kommentarer og
1 løsning

Stop spam fra yahoo.com

Jeg får i min gæstebog en del spam's som alle kommer fra @yahoo.com mailadresser, kan jeg i min kode indsætte et par linier som gør, at hvis det er en yahoo.com mailadresse, kan der ikke skrives et indlæg ?

Her er min kode:

<?php
require("./mysql-funktioner2.php");
require("./design-funktioner2.php");
require("./indstillinger2.php");

if(is_array($HTTP_GET_VARS)) {
  $start_nr = $HTTP_GET_VARS['start_nr'];
} elseif (is_array($_GET)) {
  $start_nr = $_GET['start_nr'];
}

if(!$start_nr || $start_nr < 0) {
  $start_nr = 0;
}

$sql = "select id, navn, epost, web, date_format(tid, '%e/%c %Y, %H:%i') as tiden, besked from gaestebog2 order by tid desc limit $start_nr, $antal_ad_gangen";
$taeller_sql = "select count(*) as antal from gaestebog2";

aabn_forbindelse_og_vaelgdb();
$resultat = sql_spoerg_og_faa_svar($sql);
$optaelling = sql_spoerg_og_faa_svar($taeller_sql);
luk_forbindelse();

extract($optaelling[0]);

if($antal > ($start_nr + $antal_ad_gangen)) {
   
    $naeste_start_nr = $start_nr + $antal_ad_gangen;
    $naeste_nav = "<a class=\"skriv\" href=\"$PHP_SELF?start_nr=$naeste_start_nr\">N&aelig;ste</a>";

} else {

    $naeste_nav = "<span class=\"doedt-link\">N&aelig;ste</span>";

}

if($start_nr > 0 && ($start_nr - $antal_ad_gangen) < $antal) {

    $forrige_start_nr = $start_nr - $antal_ad_gangen;
    $forrige_nav = "<a class=\"skriv\" href=\"$PHP_SELF?start_nr=$forrige_start_nr\">Forrige</a>";

} else {

    $forrige_nav = "<span class=\"doedt-link\">Forrige</span>";

}


    $nav = "<center><table width=\"$tabel_bredde\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">
    <tr><td align=\"left\" width=\"33%\">$forrige_nav</td>
    <td align=\"center\" width=\"34%\"><a class=\"skriv\" href=\"skriv2.php\">Skriv i gæstebogen</a></td>
    <td align=\"right\" align=\"33%\">$naeste_nav</td></tr>
    </table></center>";

echo "$nav <p />";

if(count($resultat) < 1) {

  echo "Der er ingen indl&aelig;g i g&aestebogen";

} else {

  for($i=0;$i<count($resultat);$i++) {


   
    extract($resultat[$i]);

   
    $besked = stripslashes($besked);
    $navn = stripslashes($navn);
    $epost = stripslashes($epost);
    $web = stripslashes($web);


    if($html_p != "t") {
        $navn = htmlentities($navn);
        $epost = htmlentities($epost);
        $web = htmlentities($web);
        $besked = htmlentities($besked);
    }

    $besked = nl2br($besked);


    if(ereg("@", $epost)) {
        $navn = "<a class=\"gaestebog_overskrift\" href=\"mailto:$epost\">$navn</a>";
    }
   
    if(ereg("w", $web)) {
        $web2 = "<a class=\"gaestebog_overskrift\" href=\"http://$web\">web</a>";
    }

 
?>


    <center><table width="<?php echo $tabel_bredde; ?>" cellpadding="1" cellspacing="0" border="0">
        <tr><td class="gbog-baggrund" width="100%" align="center">

            <table border="0" cellpadding="8" cellspacing="0" width="100%">
                <tr><td class="gaestebog_overskrift" width="100%">Skrevet af: <?php echo $navn; ?>&nbsp;&nbsp;|&nbsp;&nbsp; <?php echo $web2; ?>&nbsp;&nbsp;|&nbsp;&nbsp;<?php echo $tiden; ?></td></tr>
            </table>

        </td></tr><tr><td class="gbog-baggrund" align="center" width="100%">

            <table border="0" cellpadding="8" cellspacing="0" width="100%">
                <tr><td class="gbog-bund" width="100%">
                <?php echo $besked; ?>
                </td></tr>
            </table>

        </td></tr>
    </table></center><p />

<?php

  }

  echo $nav;

}

echo bund();

?>
Avatar billede mcgoat Nybegynder
11. august 2006 - 23:05 #1
Det er da syndt for de "rigtige" brugere af Yahoo er det ikke?

Hvis det er reklamespam osv med Viagra og sådn, så er det vel bedre at lave sådan at hvis man har skrevet et "badword" så kan den ikke poste?
Avatar billede iss Novice
11. august 2006 - 23:07 #2
skriv2.php ville nok sige mere...
Avatar billede 3xm Nybegynder
11. august 2006 - 23:08 #3
prøv med den her: http://dk2.php.net/manual/en/function.stristr.php

men jeg vil mcgoat ret i at det er synd for de rigtige mennesker med yahoo-adresser.

=)
Avatar billede detail Nybegynder
14. august 2006 - 17:51 #4
DEt med yahoo. adresserne må jeg leve med frem for alle de spams jeg får..

Her er skriv2.php


<?php

require("design-funktioner2.php");



?>
<link href="css/formular.css" rel="stylesheet" type="text/css">


<form action="gem2.php" method="post">
<table border="0" cellpadding="5" cellspacing="0">
<tr><td align="right"><div align="right">Navn:</div></td>
<td width="340"><input type="text" name="navn" size="30" maxsize="100">
* </td>
</tr>
<tr><td align="right"><div align="right">ePost:</div></td>
<td><input type="text" name="epost" size="30" maxsize="100">
* </td>
</tr>
<tr><td align="right">Din hjemmeside:</td>
<td><input type="text" name="web" size="30" maxsize="100">
</td>
</tr>
<tr><td align="right" valign="top">Dit indlæg:</td>
<td><textarea cols="50" rows="10" name="besked"></textarea>
*</td>
</tr>
<tr><td></td><td><input name="Submit" type="submit" value="&nbsp;&nbsp;Send indlæg ">
  &nbsp;&nbsp;
  <input type="reset" name="Reset" value="&nbsp;&nbsp;Tøm felter"></td>
</tr>
</table>
</form>


<?php

echo bund();

?>

Håber der er en løsning..
Avatar billede mcgoat Nybegynder
14. august 2006 - 17:58 #5
men.. hvorfor ikke bare lave et array der indeholder (Viagra, xxx, bla, bla,bla,bla,bla,bla) og hvis der er noget i felterne der minder om det skal man ikke have lov til at poste. syntes jeg da ville være mere optimalt.

Hvad hvis du begynder at få en masse spam fra @tdc og @hotmail adresser? skal de så også bannes?
Avatar billede detail Nybegynder
21. august 2006 - 10:02 #6
mcgoat - dti foslag er meget fint, men jeg ved ikke hvordan koden skal se ud, og hvor den skal sættes ind !!
Avatar billede iss Novice
21. august 2006 - 10:06 #7
Det ville hjælpe med gem2.php... eller retter der hvor din laver insert til sql...
Avatar billede detail Nybegynder
21. august 2006 - 10:25 #8
<?php

require("./mysql-funktioner2.php");
require("./design-funktioner2.php");
require("./indstillinger2.php");

if(is_array($HTTP_POST_VARS)) {
  $navn = $HTTP_POST_VARS['navn'];
  $epost = $HTTP_POST_VARS['epost'];
  $web = $HTTP_POST_VARS['web'];
  $besked = $HTTP_POST_VARS['besked'];
} elseif (is_array($_POST)) {
  $navn = $_POST['navn'];
  $epost = $_POST['epost'];
  $web = $_POST['web'];
  $besked = $_POST['epost'];
}

function gbog_fejl($fejl) {

    $generel_tekst = "<p>V&aelig;r venlig at g&aring; tilbage og ret til.</p>";

    $fejlmelding = "<ul>";

    for($i=0;$i<count($fejl);$i++) {
        $fejlmelding .= "<li>". $fejl[$i];
    }

    $fejlmelding .= "</ul>";

    echo top("Fejl") . "G&aelig;stebogen brokkede sig lidt over dit input:" . $fejlmelding . $generel_tekst . bund();
    exit;

}

function skriv_i_gbog($navn, $epost, $web, $besked) {
   
    $ip = getenv('REMOTE_ADDR');

    $sql = "insert into gaestebog2(navn,epost,web,besked,ip,tid)
        values('$navn','$epost','$web','$besked','$ip',now())";

    aabn_forbindelse_og_vaelgdb();
    sql_spoerg($sql);
    luk_forbindelse();

}


if(!ereg("[A-z0-9]+", $navn)) {

    $fejl[] = "Du har ikke skrevet dit navn";

}

if(!ereg("[A-z0-9]+", $besked)) {

    $fejl[] = "Du har ikke skrevet nogen besked";

}

if(count($fejl) > 0) {
    gbog_fejl($fejl);
}

skriv_i_gbog(addslashes($navn),addslashes($epost),addslashes($web),addslashes($besked));


if($epost_p == "t") {

  $ip = getenv('REMOTE_ADDR');
  $epostens_indhold = "$navn $web har skrevet denne besked fra IP-adressen $REMOTE_ADDR:\n-----------------------------------------------------\n\n$besked";

  mail($admin_epost, "Der er skrevet i din Gæstebog!", $epostens_indhold);

}

?>

Her er gem2.php - det ville være smart hvis et at de blacklistede mailadresse, aktiverer en popup der kort fortæller hvorfor de ikke kan skrive i gæstebogen...
Avatar billede iss Novice
21. august 2006 - 14:05 #9
Ikke testet:
$forbudtedomain = array("yahoo.com", "eksperten.dk");
$domain = explode("@", $epost);
$domain = strtolower($domain[1]);

if(in_array($domain, $forbudtedomain)) {
    $fejl[] = "Du har valgt et forbudt domain til din email";
}



$forbudteord = array("mac", "apple", "sex", "drugs");
$antalforbudteord = 0;

foreach($forbudteord as $ord) {
    if (strpos(strtolower($besked), $ord)) $antalforbudteord = substr_count(strtolower($besked), $ord);
}
if ($antalforbudteord > 0) {
    $fejl[] = "Du har skrevet ".$antalforbudteord." forbudt(e) ord";
}
Avatar billede detail Nybegynder
21. august 2006 - 16:11 #10
iss har du et bud på hvor i filen det evt. skal sættes ind.?
Avatar billede iss Novice
21. august 2006 - 16:17 #11
Blandt dine andre tjek:
if(!ereg("[A-z0-9]+", $navn)) {

    $fejl[] = "Du har ikke skrevet dit navn";

}

if(!ereg("[A-z0-9]+", $besked)) {

    $fejl[] = "Du har ikke skrevet nogen besked";

}
Avatar billede detail Nybegynder
22. august 2006 - 18:25 #12
Godt gået - Det virker !!! iss smid et svar hvis du vil have nogle velfortjente points..
Avatar billede iss Novice
22. august 2006 - 18:30 #13
Nope...
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