Hey mensen ,

heb een simpele gastenboek, zonder sql .
maar sinds enkele weken heb ik spambots op me site
Ik heb geprobeert ipbans via .Htacces te geven.
maar omdat ze telkens proxy's pakken maakt dat dus niet uit:)

nu ben ik bezig met een vraag die ze moeten invullen waar maar 1 goede antwoord voor is
maar helaas werkt het niet naar behoren
zonder intevullen kunnen ze gewoon posten

heb deze topic ook op andere forum geplaats
maar daar nog geen hulp gehad

hier mijn script

<?php
 
 $amount=15;

  if ($_GET['action']=='write') {
  	header('location: gb.php?action=read&start=0');
    $file=fopen('gastenboek.txt','a');

    $message=str_replace("\r",'',$message);
    $message=str_replace("\n",'{{',$_GET['message']);
    fwrite($file,$_GET['name'].'|||'.$_GET['email'].'|||'.date('d-m-Y').'|||'.$_GET['url'].'|||'.$message."\n");
    fclose($file);
    
  }

  $start=(isset($_GET['start'])?$_GET['start']:0);
  $gastenboek=Array();
  $gastenboek=file('gastenboek.txt');

?>

 <SCRIPT language="JavaScript">
    function validate(form) {
      if (form.name.value=="") {
        alert("Vul je naam in");
        return false;
      } else if (form.message.value=="") {
        alert("Vul je bericht in");
        return false;
      }
    }


if (isset($antispam == '8') or ($antispam == 'acht')) {
echo $content=eregi_replace("<!--beginning-->", "<!--beginning-->$message", $content);
}
    </SCRIPT>
    
 
  <P>
  <TABLE width="100%" cellspacing="0" cellpadding="0" >
    <TR>
      <TD><b>Ik zou het leuk vinden als je een berichtje achter laat in het gastenboek.</b><br></TD>
    </TR>
  </TABLE>
  <TABLE width="100%" cellspacing="0" cellpadding="0">
    <TR>
      <TD class="side"> Berichten <? echo $start+1; ?> tot en met <? echo min($start+$amount,sizeof($gastenboek)); ?>.
        <HR> <TABLE width="100%" >
          <?
          $gastenboek=array_reverse($gastenboek);
          for ($i=$start;$i<$start+$amount && $i<sizeof($gastenboek);$i++) {
            list($name,$email,$date,$url,$message)=explode('|||',$gastenboek[$i]);
            $message=str_replace('{{',"\n",$message);
            echo '<TR><TD><B>'.($email!=""?'<A href="mailto:'.$email.'">'.$name.'</A>':$name).'</B></TD><TD 

align="right"><B>'.$date.'</B></TD></TR>'."\n";
            echo ($url!=""?'<TR><TD colspan="2"><A href="'.$url.'" target="_blank">'.$url.'</A></TD></TR>':'')."\n";
            echo '<TR><TD colspan="2"><SPAN>'.str_replace("\n",'<BR>',htmlspecialchars

($message)).'</SPAN></TD></TR>'."\n";
            echo '<TR><TD colspan="2"><HR></TD></TR>'."\n";
          }
        ?>
        </TABLE>
        <CENTER>
          <?
          if ($start>0) echo '<A href="gb.php?start='.max(0,$start-$amount).'"><<<</A> ';
          if ($start+$amount<sizeof($gastenboek)) echo ' <A href="gb.php?start='.($start+$amount).'">>>></A>';
        ?>   </CENTER></TD>
    </TR>
  </TABLE>
  <P>
  <TABLE width="100%" cellspacing="0" cellpadding="0" >
    <TR>
      <TD class="side">Nieuw bericht</TD>
    </TR>
  </TABLE>
  <TABLE width="100%" cellspacing="0" cellpadding="0" >
    <TR>
      <TD class="side"> <FORM action="gb.php" method="GET" onSubmit="return validate(this);">
          <INPUT type="hidden" name="action" value="write">
          <TABLE class="side">
            <TR>
              <TD>Naam:</TD>
              <TD><INPUT type="text" name="name" size="30"></TD>
            </TR>
            <TR>
              <TD>E-Mail:</TD>
              <TD><INPUT type="text" name="email" size="30">
                <font color="#f19028">(optioneel)</font></TD>
            </TR>
            <TR>
              <TD>Homepage:</TD>
              <TD><INPUT name="url" type="text" value="http://" size="30">
                <font color="#f19028">(optioneel)</font></TD>
            </TR>
            <TR>
              <TD>Bericht:</TD>
              <TD><TEXTAREA name="message" cols="50" rows="5"></TEXTAREA></TD>
            </TR>
          </TABLE>


Anti-spam code: hoeveel is zes plus twee? <input type="text" name="antispam" size="3">
<input type="submit" name="email_submit" value="submit" ?>
    </form>
</form>
          
  <p>
    
        </FORM></TD>
    </TR>
  </TABLE>
Wat heb je geprobeerd dan?
Kan je wat relevante code laten zien?


<?
 
      $amount=15;

  if ($_GET['action']=='write') {
  	header('location: gb.php?action=read&start=0');
    $file=fopen('gastenboek.txt','a');

    $message=str_replace("\r",'',$message);
    $message=str_replace("\n",'{{',$_GET['message']);
    fwrite($file,$_GET['name'].'|||'.$_GET['email'].'|||'.date('d-m-Y').'|||'.$_GET['url'].'|||'.$message."\n");
    fclose($file);
    
  }

  $start=(isset($_GET['start'])?$_GET['start']:0);
  $gastenboek=Array();
  $gastenboek=file('gastenboek.txt');

?>

 <SCRIPT language="JavaScript">
    function validate(form) {
      if (form.name.value=="") {
        alert("Vul je naam in");
        return false;
      } else if (form.message.value=="") {
        alert("Vul je bericht in");
        return false;
      }
    }


if (isset($antispam == '8') or ($antispam == 'acht')) {
echo $content=eregi_replace("<!--beginning-->", "<!--beginning-->$message", $content);
}
    </SCRIPT>
    
 
  <P>
  <TABLE width="100%" cellspacing="0" cellpadding="0" >
    <TR>
      <TD><b>Ik zou het leuk vinden als je een berichtje achter laat in het gastenboek.</b><br></TD>
    </TR>
  </TABLE>
  <TABLE width="100%" cellspacing="0" cellpadding="0">
    <TR>
      <TD class="side"> Berichten <? echo $start+1; ?> tot en met <? echo min($start+$amount,sizeof($gastenboek)); ?>.
        <HR> <TABLE width="100%" >
          <?
          $gastenboek=array_reverse($gastenboek);
          for ($i=$start;$i<$start+$amount && $i<sizeof($gastenboek);$i++) {
            list($name,$email,$date,$url,$message)=explode('|||',$gastenboek[$i]);
            $message=str_replace('{{',"\n",$message);
            echo '<TR><TD><B>'.($email!=""?'<A href="mailto:'.$email.'">'.$name.'</A>':$name).'</B></TD><TD 

align="right"><B>'.$date.'</B></TD></TR>'."\n";
            echo ($url!=""?'<TR><TD colspan="2"><A href="'.$url.'" target="_blank">'.$url.'</A></TD></TR>':'')."\n";
            echo '<TR><TD colspan="2"><SPAN>'.str_replace("\n",'<BR>',htmlspecialchars

($message)).'</SPAN></TD></TR>'."\n";
            echo '<TR><TD colspan="2"><HR></TD></TR>'."\n";
          }
        ?>
        </TABLE>
        <CENTER>
          <?
          if ($start>0) echo '<A href="gb.php?start='.max(0,$start-$amount).'"><<<</A> ';
          if ($start+$amount<sizeof($gastenboek)) echo ' <A href="gb.php?start='.($start+$amount).'">>>></A>';
        ?>   </CENTER></TD>
    </TR>
  </TABLE>
  <P>
  <TABLE width="100%" cellspacing="0" cellpadding="0" >
    <TR>
      <TD class="side">Nieuw bericht</TD>
    </TR>
  </TABLE>
  <TABLE width="100%" cellspacing="0" cellpadding="0" >
    <TR>
      <TD class="side"> <FORM action="gb.php" method="GET" onSubmit="return validate(this);">
          <INPUT type="hidden" name="action" value="write">
          <TABLE class="side">
            <TR>
              <TD>Naam:</TD>
              <TD><INPUT type="text" name="name" size="30"></TD>
            </TR>
            <TR>
              <TD>E-Mail:</TD>
              <TD><INPUT type="text" name="email" size="30">
                <font color="#f19028">(optioneel)</font></TD>
            </TR>
            <TR>
              <TD>Homepage:</TD>
              <TD><INPUT name="url" type="text" value="http://" size="30">
                <font color="#f19028">(optioneel)</font></TD>
            </TR>
            <TR>
              <TD>Bericht:</TD>
              <TD><TEXTAREA name="message" cols="50" rows="5"></TEXTAREA></TD>
            </TR>

	
          </TABLE>
Anti-spam code: hoeveel is zes plus twee? <input type="text" name="antispam" size="3">
<input type="submit" name="email_submit" value="submit" ?>
    </form>
</form>
          
  <p>
    
        </FORM></TD>
    </TR>
  </TABLE>
Regel 34 en 35 is gewoon loos. PHP kan je niet in een JavaScript-blok verwerken.
Je zult het beste gewoon in de PHP-code zelf moeten kijken.

Verder zou je voor je fwrite() functie die controle kunnen inbouwen. Maar ik denk dat een vaste rekensom erg snel gekraakt zal worden.
Ger van Steenderen op 26/08/2014 21:01:21

Ik redirect bots altijd naar de NSA (in de ijdele hoop dat ze daar van schrikken)


Meen je dit echt? Ik ken er die het zouden durven :)
Alsof de botjes ervan schrikken. Botjes zijn intelligent, maar niet zo intelligent dat ze de NSA zullen kennen ;-).
ik weet niet of dit helpt. maar ik gebruik persoonlijk zelf altijd RE Captcha
deze is live en ook blind vriendelijk. en bovendien bots kunnen er weinig mee.
hier is een link naar de PHP voorbeeld van Re captcha. je moet wel even een key activeren op de captcha website
https://developers.google.com/recaptcha/docs/php < is waar je php documentatie vind
en hier krijg je een API key
https://www.google.com/recaptcha/admin#whyrecaptcha

ik wil niet adverteren ofzo. dus ik hoop dat ik niemand kwaad doe maar dit helpt bij mij altijd i.p.v. zelf een captcha te knutselen
Het leuke van ReCaptcha (wat door Google is over overgekocht) is dat er een effectieve bot-net herkenning in zit. Als een botnetje de Captcha voor zijn kiezen krijgt, is deze aanzienlijk moeilijker dan gemiddeld.
das alleen maar positief toch?

Reageren