Avatar billede woogoo Nybegynder
11. september 2006 - 10:25 Der er 17 kommentarer og
1 løsning

Undgå spam i Tagwall!

Hej Eksperter!

Jeg har en tagwall her og har et problem med at der er der bliver ved med at spamme.. Det er ikke en person der sidder ved 1 computer så det er derfor umuligt for mig bare at blokere for ip adressen.. men jeg har dette tagwall script som kører på en MySQL og ville høre om der var nogen der kunne sætte en funktion ind i koden der gjorde at den tjekkede MySQL databsen igennem og tjekkede om der var et indlæg allerede der var magen til og derefter "ignorerede" at indsætte indlægget!

her er koden:

<? include "inc/cfdb.php"; ?>
<?if ($_POST[action] == "update"){   
        $emne = ($_POST[emne]);   
        $fra = ($_POST[fra]);   
        $besked = nl2br($_POST[besked]);   
        $sql = "INSERT INTO tagwall (fra,emne,date,besked) VALUES ('".$fra."','".$emne."',CURDATE(),'".$besked."')";       
            mysql_query($sql) or die (mysql_error());}
?>
<html>
  <head>
    <style>
      body {
      scrollbar-base-color: #000000;
      scrollbar-arrow-color: #000000;
      scrollbar-3dlight-color: #000000;
      scrollbar-darkshadow-color: #ffffff;
      scrollbar-face-color: #ffffff;
      scrollbar-highlight-color: #E8E8E8;
      scrollbar-shadow-color: #000000;
      scrollbar-track-color: #DBDBDB;
      }
    </style>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <style type="text/css">
        <!--
body {
    background-image: url(../../images/index_22.gif);
    background-repeat: no-repeat;
    background-attachment: fixed;
    margin-left: 5px;
    margin-top: 5px;
    margin-right: 5px;
    margin-bottom: 5px;
}
body,td,th {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
}
.style2 {font-size: 10px}
-->
      </style>
    </head>
  <body link="#000000" alink="#000000" vlink="#000000">
    <center>
      <form action="" method="post">
        <input type="hidden" name="action" value="update">
          <FONT face="tahoma" size="2">
            <b>Skriv i tagwall'en:</b>
            <br>
          </FONT>
          <script type="text/javascript">
            function indsaet(smiley){
            document.getElementById("msg").value = document.getElementById("msg").value + smiley;
            document.getElementById("msg").focus();}
          </script>
          <input type="text" name="fra" onfocus="if(this.value=='Navn')this.value='';" onblur="if(this.value=='')this.value='Navn';" value="Navn" size="23" maxlength="100" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #000000; font-family: Verdana; font-size: 8 pt; width: 300" />
          <br>
            <input type="text" name="emne" onfocus="if(this.value=='E-mail adresse')this.value='';" onblur="if(this.value=='')this.value='E-mail adresse';" value="E-mail adresse" size="23" maxlength="60" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #000000; font-family: Verdana; font-size: 8 pt; width: 300" />
            <br>
              <textarea style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #000000; font-family: Verdana; font-size: 8 pt; width: 300;height: 100px" id="msg" name="besked" cols="45" rows="4"></textarea>
              <br>
                <input align="right" name="update" type="submit" action="tagwall.php" value="Skriv" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #C4C4C4; font-family: Verdana; font-size: 8 pt" />
                <input align="left" name="reset" type="reset" value="Reset" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #C4C4C4; font-family: Verdana; font-size: 8 pt" />
                <br>
                </center>
    <br>
      <FONT face="tahoma" size="2">
        Beskeder:</font><br>
          <?    $res_tagwall = mysql_query("SELECT * FROM tagwall order by id DESC");            while ($row_tagwall = mysql_fetch_array($res_tagwall)){?>
          <font face="tahoma" size="2">
            <hr align="center" width="100%" style="height: 1;margin:0px 0px 5px 5px;background-color: blue;color: #C6C6C6">
              <font size="1" color="#000000">
             
                <a href="mailto:<?=$row_tagwall[emne]?>" target=_blank>
                <?=$row_tagwall[fra]?>
                </a>
             
             
              </font>
              <font size="1" color="#FF0000">
                <?=$row_tagwall[date]?>
              </font>
              <br />
              </b>
              <font size="1" color="#000000">
                <?=$row_tagwall[besked]?>
              </font>
              <?}?>
            </body>
</html>
Avatar billede coderdk Praktikant
11. september 2006 - 10:39 #1
Du kan prøve at sætte et lille regnestykke ind:

<?

    include "inc/cfdb.php";

    if ($_POST[action] == "update")
    { 
        if ( $_POST['regn'] != array_sum( array_slice( preg_split( "//", $_POST['x'] ), 1, 3 ) ) )
        {
            die( "Udregningen er forkert, prøv igen!" );
        }       
        $emne = ($_POST[emne]); 
        $fra = ($_POST[fra]); 
        $besked = nl2br($_POST[besked]); 
        $sql = "INSERT INTO tagwall (fra,emne,date,besked) VALUES ('".$fra."','".$emne."',CURDATE(),'".$besked."')";     
            mysql_query($sql) or die (mysql_error());
    }

    $tal = mt_rand( 100, 999 );
    $x = array_slice( preg_split( "//", $tal ), 1, 3 );
    $stk = implode( "+", $x );

?>
<html>
  <head>
    <style>
      body {
      scrollbar-base-color: #000000;
      scrollbar-arrow-color: #000000;
      scrollbar-3dlight-color: #000000;
      scrollbar-darkshadow-color: #ffffff;
      scrollbar-face-color: #ffffff;
      scrollbar-highlight-color: #E8E8E8;
      scrollbar-shadow-color: #000000;
      scrollbar-track-color: #DBDBDB;
      }
    </style>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <style type="text/css">
        <!--
body {
    background-image: url(../../images/index_22.gif);
    background-repeat: no-repeat;
    background-attachment: fixed;
    margin-left: 5px;
    margin-top: 5px;
    margin-right: 5px;
    margin-bottom: 5px;
}
body,td,th {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
}
.style2 {font-size: 10px}
-->
      </style>
    </head>
  <body link="#000000" alink="#000000" vlink="#000000">
    <center>
      <form action="" method="post">
        <input type="hidden" name="action" value="update">
          <FONT face="tahoma" size="2">
            <b>Skriv i tagwall'en:</b>
            <br>
          </FONT>
          <script type="text/javascript">
            function indsaet(smiley){
            document.getElementById("msg").value = document.getElementById("msg").value + smiley;
            document.getElementById("msg").focus();}
          </script>
          <input type="hidden" name="x" value="<?= $tal ?>">
          For at poste skal du udregne dette: <?= $stk ?> = <input type="text" name="regn" value="1" size="3">
          <input type="text" name="fra" onfocus="if(this.value=='Navn')this.value='';" onblur="if(this.value=='')this.value='Navn';" value="Navn" size="23" maxlength="100" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #000000; font-family: Verdana; font-size: 8 pt; width: 300" />
          <br>
            <input type="text" name="emne" onfocus="if(this.value=='E-mail adresse')this.value='';" onblur="if(this.value=='')this.value='E-mail adresse';" value="E-mail adresse" size="23" maxlength="60" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #000000; font-family: Verdana; font-size: 8 pt; width: 300" />
            <br>
              <textarea style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #000000; font-family: Verdana; font-size: 8 pt; width: 300;height: 100px" id="msg" name="besked" cols="45" rows="4"></textarea>
              <br>
                <input align="right" name="update" type="submit" action="tagwall.php" value="Skriv" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #C4C4C4; font-family: Verdana; font-size: 8 pt" />
                <input align="left" name="reset" type="reset" value="Reset" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #C4C4C4; font-family: Verdana; font-size: 8 pt" />
                <br>
                </center>
    <br>
      <FONT face="tahoma" size="2">
        Beskeder:</font><br>
          <?    $res_tagwall = mysql_query("SELECT * FROM tagwall order by id DESC");            while ($row_tagwall = mysql_fetch_array($res_tagwall)){?>
          <font face="tahoma" size="2">
            <hr align="center" width="100%" style="height: 1;margin:0px 0px 5px 5px;background-color: blue;color: #C6C6C6">
              <font size="1" color="#000000">
           
                <a href="mailto:<?=$row_tagwall[emne]?>" target=_blank>
                <?=$row_tagwall[fra]?>
                </a>
           
           
              </font>
              <font size="1" color="#FF0000">
                <?=$row_tagwall[date]?>
              </font>
              <br />
              </b>
              <font size="1" color="#000000">
                <?=$row_tagwall[besked]?>
              </font>
              <?}?>
            </body>
</html>

:)
Avatar billede woogoo Nybegynder
11. september 2006 - 10:54 #2
Den gør ikke rigtig noget! man kan stadig skrive samme indlæg 2 gange!
Avatar billede coderdk Praktikant
11. september 2006 - 11:08 #3
Ja, men hvis det er "normale" spam-robotter, der sender links til pokersider, porno, viagra osv, vil de nok slet ikke dukke op ;)
Avatar billede woogoo Nybegynder
11. september 2006 - 11:09 #4
hvordan kan det være? kan du forklare hvad det stykke kode gør?
Avatar billede coderdk Praktikant
11. september 2006 - 11:10 #5
Men hvis du sætte dette ind lige før din INSERT:

    $sql = sprintf( "
        SELECT
            1
        FROM
            tagwall
        WHERE
            fra = '%s'
            AND emne = '%s'
            AND besked = '%s'
        "
        ,$fra
        ,$emne
        ,$besked
        );
    $qh = mysql_query( $sql );
    if ( mysql_num_rows( $qh ) > 0 )
    {
        die( "Du behøver ikke gentage dig selv!" );
    }

Så opnår du også det ;)
Avatar billede coderdk Praktikant
11. september 2006 - 11:14 #6
woogoo, Det hedder CAPTCHA (eller en form for det) - Du tvinger folk til at lave en udregning før de kan poste en besked - De fleste automatiserede robotter de poster bare blindt - Så hvis man sætter et regnestykke ind, så kommer der ikke spam :)
Avatar billede woogoo Nybegynder
11. september 2006 - 11:15 #7
Er ikke lige super haj til PHP.. men denne INSERT du snakker om.. xD hvor finder jeg den! hehe
Avatar billede woogoo Nybegynder
11. september 2006 - 11:22 #8
Ah.. fik lige en åbenbaring.. ;) Fandt ud af det.. men kan man ikke få den til at poste teksten (Du behøver ikke gentage dig selv!) på samme side som tagwallen istedet for at gå til "en ny side"?
Avatar billede woogoo Nybegynder
11. september 2006 - 11:27 #9
prøvede at ændre til echo og så poster den på samme side, men dog virker antispam-funktionen ikke... :(
Avatar billede coderdk Praktikant
11. september 2006 - 11:35 #10
Prøv:

<?

    include "inc/cfdb.php";
   
    $res = "";

    if ($_POST[action] == "update")
    {
        if ( $_POST['regn'] != array_sum( array_slice( preg_split( "//", $_POST['x'] ), 1, 3 ) ) )
        {
            die( "Udregningen er forkert, prøv igen!" );
        }
        $emne = ($_POST[emne]);
        $fra = ($_POST[fra]);
        $besked = nl2br($_POST[besked]);
        $sql = sprintf( "
            SELECT
                1
            FROM
                tagwall
            WHERE
                fra = '%s'
                AND emne = '%s'
                AND besked = '%s'
            "
            ,$fra
            ,$emne
            ,$besked
            );
        $qh = mysql_query( $sql );
        if ( mysql_num_rows( $qh ) > 0 )
        {
            $res = "<p style='color: #f00'>Du behøver ikke gentage dig selv!</p>";
        }
        else
        {
            $sql = "INSERT INTO tagwall (fra,emne,date,besked) VALUES ('".$fra."','".$emne."',CURDATE(),'".$besked."')";   
                mysql_query($sql) or die (mysql_error());
        }
    }

    $tal = mt_rand( 100, 999 );
    $x = array_slice( preg_split( "//", $tal ), 1, 3 );
    $stk = implode( "+", $x );

?>
<html>
  <head>
    <style>
      body {
      scrollbar-base-color: #000000;
      scrollbar-arrow-color: #000000;
      scrollbar-3dlight-color: #000000;
      scrollbar-darkshadow-color: #ffffff;
      scrollbar-face-color: #ffffff;
      scrollbar-highlight-color: #E8E8E8;
      scrollbar-shadow-color: #000000;
      scrollbar-track-color: #DBDBDB;
      }
    </style>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <style type="text/css">
        <!--
body {
    background-image: url(../../images/index_22.gif);
    background-repeat: no-repeat;
    background-attachment: fixed;
    margin-left: 5px;
    margin-top: 5px;
    margin-right: 5px;
    margin-bottom: 5px;
}
body,td,th {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
}
.style2 {font-size: 10px}
-->
      </style>
    </head>
  <body link="#000000" alink="#000000" vlink="#000000">
    <center>
        <?= $res ?>
      <form action="" method="post">
        <input type="hidden" name="action" value="update">
          <FONT face="tahoma" size="2">
            <b>Skriv i tagwall'en:</b>
            <br>
          </FONT>
          <script type="text/javascript">
            function indsaet(smiley){
            document.getElementById("msg").value = document.getElementById("msg").value + smiley;
            document.getElementById("msg").focus();}
          </script>
          <input type="hidden" name="x" value="<?= $tal ?>">
          For at poste skal du udregne dette: <?= $stk ?> = <input type="text" name="regn" value="1" size="3">
          <input type="text" name="fra" onfocus="if(this.value=='Navn')this.value='';" onblur="if(this.value=='')this.value='Navn';" value="Navn" size="23" maxlength="100" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #000000; font-family: Verdana; font-size: 8 pt; width: 300" />
          <br>
            <input type="text" name="emne" onfocus="if(this.value=='E-mail adresse')this.value='';" onblur="if(this.value=='')this.value='E-mail adresse';" value="E-mail adresse" size="23" maxlength="60" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #000000; font-family: Verdana; font-size: 8 pt; width: 300" />
            <br>
              <textarea style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #000000; font-family: Verdana; font-size: 8 pt; width: 300;height: 100px" id="msg" name="besked" cols="45" rows="4"></textarea>
              <br>
                <input align="right" name="update" type="submit" action="tagwall.php" value="Skriv" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #C4C4C4; font-family: Verdana; font-size: 8 pt" />
                <input align="left" name="reset" type="reset" value="Reset" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #C4C4C4; font-family: Verdana; font-size: 8 pt" />
                <br>
                </center>
    <br>
      <FONT face="tahoma" size="2">
        Beskeder:</font><br>
          <?    $res_tagwall = mysql_query("SELECT * FROM tagwall order by id DESC");            while ($row_tagwall = mysql_fetch_array($res_tagwall)){?>
          <font face="tahoma" size="2">
            <hr align="center" width="100%" style="height: 1;margin:0px 0px 5px 5px;background-color: blue;color: #C6C6C6">
              <font size="1" color="#000000">
         
                <a href="mailto:<?=$row_tagwall[emne]?>" target=_blank>
                <?=$row_tagwall[fra]?>
                </a>
         
         
              </font>
              <font size="1" color="#FF0000">
                <?=$row_tagwall[date]?>
              </font>
              <br />
              </b>
              <font size="1" color="#000000">
                <?=$row_tagwall[besked]?>
              </font>
              <?}?>
            </body>
</html>
Avatar billede woogoo Nybegynder
11. september 2006 - 11:40 #11
Ok.. :) Nu virker antispam-funktionen men den skriver ikke nogen tekst... Mens du hjælper mig kan du så se om der er noget galt i mit script som gør at danske bogstaver ikke kan vises! :S Den fucker lidt op i tag'sne og laver kinesiske tegn istedet for.. men i MySQL databasen viser den dem rigtig nok!
Avatar billede coderdk Praktikant
11. september 2006 - 12:06 #12
Hvad mener du med at den ikke skriver nogen tekst?

Prøv lige:

<?

    include "inc/cfdb.php";
 
    $res = "";
    $emne = "";
    $fra = "";
    $besked = "";

    if ($_POST[action] == "update")
    {
        $emne = ($_POST[emne]);
        $fra = ($_POST[fra]);
        $besked = nl2br($_POST[besked]);
        if ( $_POST['regn'] != array_sum( array_slice( preg_split( "//", $_POST['x'] ), 1, 3 ) ) )
        {
            $res = "<p style='color: #f00'>Udregningen er forkert, prøv igen!</p>";
        }
        else
        {
            $sql = sprintf( "
                SELECT
                    1
                FROM
                    tagwall
                WHERE
                    fra = '%s'
                    AND emne = '%s'
                    AND besked = '%s'
                "
                ,$fra
                ,$emne
                ,$besked
                );
            $qh = mysql_query( $sql );
            if ( mysql_num_rows( $qh ) > 0 )
            {
                $res = "<p style='color: #f00'>Du behøver ikke gentage dig selv!</p>";
            }
            else
            {
                $sql = "INSERT INTO tagwall (fra,emne,date,besked) VALUES ('".$fra."','".$emne."',CURDATE(),'".$besked."')"; 
                    mysql_query($sql) or die (mysql_error());
            }
        }
    }

    $tal = mt_rand( 100, 999 );
    $x = array_slice( preg_split( "//", $tal ), 1, 3 );
    $stk = implode( "+", $x );

?>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <style type="text/css">
        <!--
body {
      scrollbar-base-color: #000000;
      scrollbar-arrow-color: #000000;
      scrollbar-3dlight-color: #000000;
      scrollbar-darkshadow-color: #ffffff;
      scrollbar-face-color: #ffffff;
      scrollbar-highlight-color: #E8E8E8;
      scrollbar-shadow-color: #000000;
      scrollbar-track-color: #DBDBDB;
    background-image: url(../../images/index_22.gif);
    background-repeat: no-repeat;
    background-attachment: fixed;
    margin-left: 5px;
    margin-top: 5px;
    margin-right: 5px;
    margin-bottom: 5px;
}
body,td,th {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
}
.style2 {font-size: 10px}
-->
      </style>
    </head>
  <body link="#000000" alink="#000000" vlink="#000000">
    <center>
        <?= $res ?>
      <form action="" method="post">
        <input type="hidden" name="action" value="update">
          <FONT face="tahoma" size="2">
            <b>Skriv i tagwall'en:</b>
            <br>
          </FONT>
          <script type="text/javascript">
            function indsaet(smiley){
            document.getElementById("msg").value = document.getElementById("msg").value + smiley;
            document.getElementById("msg").focus();}
          </script>
          <input type="hidden" name="x" value="<?= $tal ?>">
          For at poste skal du udregne dette: <?= $stk ?> = <input type="text" name="regn" value="1" size="3">
          <input type="text" name="fra" onfocus="if(this.value=='Navn')this.value='';" onblur="if(this.value=='')this.value='Navn';" value="<?= strlen( $fra ) > 0 ? $fra : 'Navn' ?>" size="23" maxlength="100" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #000000; font-family: Verdana; font-size: 8 pt; width: 300" />
          <br>
            <input type="text" name="emne" onfocus="if(this.value=='E-mail adresse')this.value='';" onblur="if(this.value=='')this.value='E-mail adresse';" value="<?= strlen( $emne ) > 0 ? $emne : E-mail adresse ?>" size="23" maxlength="60" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #000000; font-family: Verdana; font-size: 8 pt; width: 300" />
            <br>
              <textarea style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #000000; font-family: Verdana; font-size: 8 pt; width: 300;height: 100px" id="msg" name="besked" cols="45" rows="4"><?= $besked ?></textarea>
              <br>
                <input align="right" name="update" type="submit" action="tagwall.php" value="Skriv" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #C4C4C4; font-family: Verdana; font-size: 8 pt" />
                <input align="left" name="reset" type="reset" value="Reset" style="background-color: #EFEFEF; color: #000000; frameborder: 1; border-color: #C4C4C4; font-family: Verdana; font-size: 8 pt" />
                <br>
                </center>
    <br>
      <FONT face="tahoma" size="2">
        Beskeder:</font><br>
          <?    $res_tagwall = mysql_query("SELECT * FROM tagwall order by id DESC");            while ($row_tagwall = mysql_fetch_array($res_tagwall)){?>
          <font face="tahoma" size="2">
            <hr align="center" width="100%" style="height: 1;margin:0px 0px 5px 5px;background-color: blue;color: #C6C6C6">
              <font size="1" color="#000000">
       
                <a href="mailto:<?=$row_tagwall[emne]?>" target=_blank>
                <?=utf8_decode($row_tagwall[fra])?>
                </a>
       
       
              </font>
              <font size="1" color="#FF0000">
                <?=utf8_decode($row_tagwall[date])?>
              </font>
              <br />
              </b>
              <font size="1" color="#000000">
                <?=utf8_decode($row_tagwall[besked])?>
              </font>
              <?}?>
            </body>
</html>
Avatar billede woogoo Nybegynder
11. september 2006 - 12:10 #13
nu virker det slet ikke! Den viser bare en blank side!
Avatar billede coderdk Praktikant
11. september 2006 - 12:22 #14
Øøøh weird, prøv lige at fjerne de utf8_decode() der er i bunden, altså så der kun står $row_tagwall[fra] osv...
Avatar billede woogoo Nybegynder
11. september 2006 - 13:03 #15
Gør stadig det samme!
Avatar billede woogoo Nybegynder
11. september 2006 - 13:44 #16
Og forresten.. (har jeg først lige lagt mærke til nu).. den der udregning.. Det er ikke så smart syntes jeg! hvis man skal sidde og regne noget ud bare for at lave et tag!
Avatar billede woogoo Nybegynder
11. september 2006 - 14:11 #17
Fandt selv ud af en løsning! Men hvis du lige smider et svar får du point som tak for inspirationen! :)
Avatar billede coderdk Praktikant
11. september 2006 - 14:22 #18
heheh ok :)
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