php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 18.03.2009, 16:03  
Neuer Benutzer
 
Registriert seit: 18.03.2009
Beiträge: 2
francis-braun befindet sich auf einem aufstrebenden Ast
Standard Gästebuch & Spam

Hallo zusammen,

gestern habe ich mal wieder nach meinem namen gegoogelt (mir war halt langweilig) und bin so drauf gekommen meine seite zu besuchen (klingt komisch, war da aber seit 1 jahr oder so nimmer drauf, die vegetiert halt vor sich hin.) Google hat auch gleich ausgegeben, dass meine Homepage ein Risiko für meinen Rechner sei, nach genauerem hinsehen entdeckte ich Malware die ich inzwischen schon entfernt habe, wobei ich noch immer net verstehe, wie es dazu kommt, dass irgend etwas den Quellcode meiner index.php verändert (iframes einbaut). Naja wie gesagt, dieses Problem ist ja inzwischen schon erledigt. Ich entdeckte aber noch ein Problem. Als ich auf "Gästebuch" klickte, lud er erst einmal eine ganze Weile, bevor er dann eine Seite ausspuckte, die elends lang war. Im endeffekt befanden sich in meinem Gästebuch ca. 70000 Spam- Einträge, die alle seit dem 1.9.08 erstellt wurden. kommen sekündlich ein paar dazu. "Dagegen musst was tun", dacht ich mir und googelte einmal gepflegt durch die gegend. auf einer Internetseite fand ich dann einen verbreiteten Lösungsansatz, die schlagen da vor, ne zufällige Rechnung einzubauen und sich vom poster das Ergebnis melden zu lassen, dann wird noch überprüft ob das ergebnis stimmt und gut is :P

Ich dachte so "hey, alles klar, so nen Pipifaxrechnung im einstelligen Bereich wird doch jeder lösen können, bevor er auf "eintragen" klickt!", und so hab ich da was in den code vom Gästebuch eingefügt.

Ferner habe ich nen meta-tag eingefügt, der es suchmaschinen verbietet, die seite zu listen und hab tabellenname in der datenbank und dateiname vom gästebuch verändert.

Dann fand ich noch einen Lösungsansatz mit einem Timesptamp, im Eingabeformular ist ein hidden form versteckt, das einen timestamp mitpostet. in der datei, die das ganze an die datenbank weitergibt, wird dann überprüft ob der timestamp älter als 5 sekunden ist und wenn ja gehts weiter, wenn nein, die ^^

wie au immer, hier ist jetzt mal der Quellcode der Datei "gästebuch.php", die inzwischen "gästebuch_fr4ncisn3u.php" heißt:

PHP-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>francis-braun.de</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta name="robots" content="noindex, nofollow">
<link href="style.css" rel="stylesheet" type="text/css" media="screen" />
</head>
<body>
<div id="wrapper">
<!-- start header -->
<div id="header">
    <h1></h1>
</div>
<!-- end header -->
<!-- start page -->
<div id="page">
    <!-- start content -->
    <div id="content">
        <div class="post">
        <h1 class="title">G&auml;stebuch</h1>
        <p class="byline"><small><br></small></p>
            <div class="entry">
                <p><center>
  <form action="senden.php" method="post">
   <table border="0" cellpadding="0" cellspacing="4">
    <tr>
     <td align="left">Name</td>
     <td><input type="text" name="name" size="31" maxlength ="20" style="BACKGROUND-COLOR:transparent; border-bottom-color: #A7C9F6; border-top-color: #A0C2EF; border-right-color: #A7C9F6; border-left-color: #A0C2EF"></td>
    </tr>
    <tr>
     <td align="left" valign="top">Deine Nachricht:</td>
     <td valign="top"><textarea name="nachricht" cols="30" rows="5" wrap="soft" style="BACKGROUND-COLOR:transparent; border-bottom-color: #A7C9F6; border-top-color: #A0C2EF; border-right-color: #A7C9F6; border-left-color: #A0C2EF"></textarea></td>
    </tr>
    <tr>
      <td align="right" colspan="2">
      <?php
       
echo "<input type=\"hidden\" name=\"timestamp\" value=\"" time() ."\">";
     
       
$random1 rand(1,10);
       
$random2 rand(1,10);

       echo 
"Ergebnis von " $random1 " plus " .$random2 ": ";
       echo 
"<input type=\"text\" name=\"aufgabe\">";
       echo 
"<input type=\"hidden\" name=\"loesung\" value=\"" * ($random1 $random2) . "\">";
      
?>
      <input type="submit" value="eintragen">
     </td>
   </table>
  </form>
  <br>
  <br>
  <?php
   $verbindung 
mysql_connect("localhost","*****","*****");

   
mysql_select_db("*****");

   
$abfrage "SELECT id, datum, name, email, website, nachricht FROM gaestebuch_fr4ncisn3u ORDER BY id DESC";
   
$ergebnis mysql_query($abfrage);
   while(
$row mysql_fetch_object($ergebnis))
      {
      
$eintrag wordwrap ($row->nachricht55"<br>"true);
      echo 
nl2br("<table width=400 border=1 tableborder=1 cellspacing=0 rules=none cellpadding=5><tr><td colspan=2 bgcolor='#B8E33C' border=1 align=left><b>$row->name</b></td></tr><tr><td colspan=2 valign='top' bgcolor='#B8E33C' align=left>$eintrag</td></tr></table><br><br>");
      }

   
?>
  </center></p>
            </div>
        </div>
    </div>
    <!-- end content -->
    <!-- start sidebar -->
    <div id="sidebar">
        <?php
         
include 'nav.html';
        
?>
    </div>
    <!-- end sidebar -->
</div>
</div>
<!-- end page --><br><div id="footer">
    <p>&nbsp;&bull;&nbsp &copy;2008 All Rights Reserved &nbsp;&bull;&nbsp; </p>
</div>
</body>
</html>
ich hoffe es ist übersichtlich genug xD, ist meine persönliche kleine art, die übersicht zu wahren und das funktioniert auch ganz gut xD

So und hier der code für die datei "senden.php":

PHP-Code:
<html>
 <head>
  <title>Gästebuch</title>
 </head>
 <body style="background-color:transparent;" text="darkblue" link="darkblue" alink="darkblue" vlink="darkblue">
 <?php
  $name 
$_POST["name"];
  
$email $_POST["email"];
  
$website $_POST["website"];
  
$nachricht $_POST["nachricht"];

  if (( 
time() - $_POST["timestamp"] < ) OR ( $_POST["aufgabe"] != $_POST["loesung"] )) 
     {
     die(
"bots gehen nach hause <meta http-equiv='refresh' content='5; URL=gaestebuch_fr4ncisn3u.php'>");
     }

  else
     {

     
$verbindung mysql_connect("localhost","*****","*****");

     
mysql_select_db("*****");

     
$eintrag "INSERT INTO gaestebuch_fr4ncisn3u
     (name, email, website, nachricht)

     VALUES
     ('$name', '$email', '$website', '$nachricht')"
;

     
$eintragen mysql_query($eintrag);

     if(
$eintragen == true)
        {
        echo 
"<br><center>Eintrag erfolgreich.<br>Sie werden in Kürze zum Gästebuch weitergeleitet.<br>Sollte die Weiterleitung nicht funktionieren, klicken Sie bitte <a href=gaestebuch.php>hier</a> <meta http-equiv='refresh' content='5; URL=gaestebuch_fr4ncisn3u.php'>";
        }
     else
        {
        echo 
"<br><center>Eintrag fehlgeschlagen.<br>Sie werden in Kürze zum Gästebuch weitergeleitet.<br>Sollte die Weiterleitung nicht funktionieren, klicken Sie bitte <a href=gaestebuch.php>hier</a> <meta http-equiv='refresh' content='5; URL=gaestebuch_fr4ncisn3u.php'>";
        }
     }
 
?>
 </body>
</html>
so, nun dazu wie es gedacht ist: Der USer soll in die Felder "name" und "nachricht" einbegeb was er will, ohne dass der user es sieht wird ein timestamp ausgegeben und als post mitgesendet. wenn der user nun abschickt funktioniert das ganze nicht. denn in der senden datei werden 2 faktoren überprüft. zum einen überprüft die senden.php ob der timestamp 5 sekunden alt ist, somit sind schon einmal schnelle bots ausgeschaltet und er überprüft auch ob das ergebnis der rechenaufgabe stimmt. Das ergebnis ist zusätzlich wie ihr dem code entnehmen könnt mit 4 multipliziert, damit der bot es nicht einfach abschreiben braucht. es wird als überprüft ob das eingegebene ergebis *4 das ergebnis ist, das sich der rechner selbst ausrechnet (wird ja schon in der ursprungsdatei mit 4 multipliziert.

so. wenn ich nun hingehe und die seiten hochlade (übrigens zu sehen auf francis-braun.de), funktioniert das ganze, bin ich keine 5 sekunden auf der gästebuchseite und schreibe kein ergebnis -> kein eintrag, bin ich zwar 5 sekunden auf der seite gebe aber kein ergebnis ein -> kein eintrag, gebe ich ein ergebnis ein, tue dies jedoch schnell und bin somit keine 5 sekunden auf der seite -> kein eintrag. So ich total zufrieden mit mir selbst gewesen und direkt mal ab inne heia gegenagen und google nomal meine seite überprüfen lassen, damit der sicherheitshinweis weg geht ... google hat au keinen sicherheitshinweis mehr drauf aber heut morgen waren bestimmt 100 neue spameinträge in meinem gästebuch, ich weiß weder ein noch aus, bei mir funktioniert die funktion aber irgendwie muss der bot eine möglichkeit haben die zu umgehen.

könnt ihr mir vielleicht weiterhelfen?

Gruß Francis

/edit: übrigens: habe ne zeit lang vergessen, den namen der datenbank in der datei senden.php umzuändern, da kamen dann stundenlang keine einträge, vielleicht hilft es euch ja beim lösen, also fakt ist, dass dieser bot unr einträge machen kann, wenn der datenbankname in der senden.php auch stimmt, heißt also der muss da drüber drauf zugreifen, denke ich. schon komisch irgendwie o.O

/edit2: Hm, ich kam gerade einmal auf die dumme idee, die senden.php umzubenennen in senden_fr4ncisn3u.php ... hab auch das formular geändert, sodass es die posts jetzt an diese adresse sendet. gästbucheinträge lassen sich somit erstellen aber ich habe seit ca. ner viertel stunde keinen neuen spameintrag drinne. das ist schon ein echter fortschritt, hoffen wir, dass es so bleibt. in diesem falle wäre das problem erledigt, aber erst einmal abwarten ob das auch hilft. ferner habe ich auch in die neue sendendatei einen meta-tag eingebaut, der suchmaschinen verbietet, diese datei zu listen (sicher ist sicher), ich halt euch aufm laufenden

Geändert von francis-braun (18.03.2009 um 16:34 Uhr).
francis-braun ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 18.03.2009, 17:44  
PTC
Erfahrener Benutzer
 
Benutzerbild von PTC
 
Registriert seit: 27.10.2007
Beiträge: 1.708
PHP-Kenntnisse:
Anfänger
PTC ist einfach richtig nettPTC ist einfach richtig nettPTC ist einfach richtig nettPTC ist einfach richtig nett
Standard

Wenn die Seite nur rumvegetiert, sehe ich nur eine sinnvolle Lösung: LÖSCHEN.

Ich sehe gerade nicht wo wir dir helfen sollen, könntest du das Ganze nochmal in Kurzform(aber verständlich) posten?
Vielleicht hilft Error Reporting:
PHP-Code:
ini_set ('display_errors'1);
error_reporting (E_ALL); 
Wenn du die Seite schnell schützen willst, dann nimm eine fertige Lösung(wie reCAPTCHA).
PTC ist offline  
Alt 18.03.2009, 18:13  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Hallo,

ich kann mich PTC anschließen: wenn sich die Seite in ein Biotop verwandelt, dann solltest die Seite aus dem Netz nehmen.
Wenn du das nicht willst, solltest du dein Skript auf jeden Fall zunächst mal gegen SQL-Injections absichern, dann wird dir auch nicht so schnell Malware untergeschoben.
Was den Spam angeht, so kann ich dir nur empfehlen, als allererstes das Formular grundlegend zu ändern (Felder umbenennen, Reihenfolge vertauschen etc.) und dir dann mal dieses Tutorial anzusehen und zu befolgen: OpenWebBoard / Tutorials / HTML & CSS / Barrierefreie CAPTCHAs (1/2)
Wenn dann trotzdem noch Spam kommt, kannst du mal eine Rechenaufgabe stellen und wenn dann noch Spam kommt, ein Captcha aufsetzen und wenn dann noch Spam kommt, die Seite endgültig vom Netz nehmen und woanders wiederaufbauen.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline  
Alt 23.03.2009, 19:20  
Neuer Benutzer
 
Registriert seit: 18.03.2009
Beiträge: 2
francis-braun befindet sich auf einem aufstrebenden Ast
Standard nunja

Seite aus dem Netz nehmen kommt jetzt nicht mehr in Frage, ich will ja jetzt mal wieder mehr dran machen, immerhin bezahl ich ja bis heute noch den VServer. Allerdings hat sich das Gästebuch- Problem erledig. Ich habe einfach eine Rechenaufgabe reingestellt und lasse nun noch zusätzlich überprüfen ob der benutzer mindestens 5 sekunden auf der seite ist. nun kommt kein spam mehr. danke für eure hilfe.

Sry für den ungenügenden Thread, bin aber noch relativ neu in der Welt von Php und wusst net wie ich mich ausdrücken soll :P

Gruß

Francis
francis-braun ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Gästebuch für jeden user chr1s Scriptbörse 2 02.03.2009 11:39
[Erledigt] Gästebuch skript ohne mysql do it yourself gandalf PHP Tipps 2008 15 11.07.2008 21:52
Gästebuch -> Spam verhindern? aktionkuba PHP Tipps 2007 23 12.02.2007 00:46
Fehler im Gästebuch Wimme PHP Tipps 2006 1 22.08.2006 16:43
Gästebuch spam verhindern Thunderstorm PHP Tipps 2006 11 11.07.2006 17:33
String durchsuchen - Spam Problem mit Gästebuch havok PHP Tipps 2006 23 15.03.2006 18:44
[Erledigt] Problem mit Gästebuch PHP Tipps 2006 5 14.02.2006 18:07
[Erledigt] 4images Gästebuch PHP Tipps 2005 11 03.06.2005 08:05
Gästebuch / Datenbank PHP Tipps 2005 2 22.04.2005 16:27
Blättern in Gästebuch auf Dateibasis nsane PHP Tipps 2005 8 22.01.2005 21:02
Unbekanntes Problem mit Gästebuch PHP Tipps 2007 3 02.01.2005 22:04
Gästebuch: Fehlermeldung-No database selected PHP-Fortgeschrittene 6 27.12.2004 14:17
Spam filter PHP-Fortgeschrittene 7 06.09.2004 16:50
Gästebuch und Blättern picco PHP Tipps 2004 23 01.09.2004 16:52
Problem mit meinem Gästebuch picco PHP Tipps 2004 10 25.08.2004 23:35

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php gästebuch spamschutz, gästebuch spamschutz php, gastebuch mit spamschutz php, durch php timestamp spam verhindern, gästebuch mit timestamp schützen beispiel, php gästebuch vor spam schützen, gästebuch php schützen, sicherheitscode im gästebuch einfügen, quellcode gästebuch php, gästebuch metatags verbieten, php gästebuch spam, php timestamp spamschutz, html unterbinden nim gästebuch php, php gästebuch ohne spam, php, gästebuch spamschutz, php gästebuch xhtml strict, php gästebuch ohne mysql spam schutz, php gaestebuch spanschutz, php gästebuch bei refresh macht er neuen eintrag, injection gästebuch spam

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:29 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum