Webstatt.org - Community seit 2006 - 2012 (2024?)

Spam in Shoutbox =(

Avatar user-258
18.04.2007 08:14

Huhu Leutz!

Hab ein großes Problem.. Seit geraumer Zeit wird unsre Shoutbox von www.pfeit.at immer vollgespammt.. eigenldich wird aber auf Links geprüft.. wenn auch primitiv (bin ganz und gar kein php fux) vll kann mir jemand helfen und ne Spam Sperre einbauen.

Ursprünglich war das die Shoutbox die user-173 für Jex-Treme gecodet hat..

code:

shoutbox.php

<div class="marg">
<?PHP
#----------------------------------------------#
# Copyright 2005 by Maximilian 'Erdo' Fitting #
# just made for jex-treme.de! #
# Dieses Script darf nur auf jex-treme.de zum #
# Download angeboten werden! Der Verweis auf #
# die Seite unten im Script darf *nicht* #
# entfernt werden! #
# Version 1.0 #
#----------------------------------------------#
#
# Wenn du einen Eintrag löschen möchtest,
# musst du einfach nur auf die Raute #
# neben dem Eintrag klicken und das Passwort
# eingeben.

/* Config */
# Hierbei musst du aufpassen, dass du immer das NACH dem Komma
# änderst! Ändere NIE das GROßGESCHRIEBENE vor dem Komma,
# sonst geht hier nix mehr zwinkern

define ('SPAMTIME', 1); //Nach wie viel Minuten der nächste Eintrag?
define ('ADMIN', ''zwinkern; //Passwort zum Löschen der Einträge
define ('PATH', ''zwinkern; //Pfad zum Ordner, in dem diese Datei liegt
define ('HTML', 0); //Soll HTML erlaubt werden? 0 = Nein, 1 = Ja
define ('LIMIT', 40); //Wie viele Einträge sollen angezeigt werden?
define ('SPLIT', 30); //Nach wie vielen ununterbrochenen Zeichen soll ein Absatz erfolgen?

define ('MYSQLHOST', 'localhost'zwinkern; //Host von MySQL Datenbank, meist localhost
define ('MYSQLUSER', ''zwinkern; //Username von MySQL Datenbank
define ('MYSQLPWD', ''zwinkern; //Passwort von MySQL Datenbank
define ('MYSQLDB', ''zwinkern; //Name der Datenbank MySQL
define ('TABLE', 'pfeitshout'zwinkern; //Name der Tabelle für Einträge

/* Start Connection */
$connection = mysql_connect(MYSQLHOST, MYSQLUSER, MYSQLPWD) or die ('Keine Verbindung möglich!'zwinkern;
mysql_select_db(MYSQLDB) or die ('Die Datenbank existiert nicht!'zwinkern;

/* Install Table */
$test = @mysql_query('SELECT * FROM `' . TABLE . '`'zwinkern;
$error = mysql_errno();
if($error == 1146) {
if (mysql_query ('CREATE TABLE `' . TABLE . '` (
`id` int(11) unsigned NOT NULL auto_increment,
`userip` varchar(150) NOT NULL default \'\',
`time` int(11) NOT NULL default \'0\',
`nickname` varchar(250) NOT NULL default \'\',
`message` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM ;'zwinkern) {
echo 'Tabelle wurde hinzugefügt. Jetzt sollte die Shoutbox funktionieren.';
} else {
echo 'Tabelle konnte nicht hinzugefügt werden: ' . mysql_error();
}
}

/* Functions */
function cutLongWords ($text, $bruch) {
$count = 0;
for ($i = 0; $i < strlen($text); $i++) {
if (substr($text, $i,1)== ' 'zwinkern {
$count = 0;
} else {
$count++;
}

if ($count > $bruch) {
$text = substr($text, 0, $i) . '<br>' . substr($text, $i, strlen($text));
$count = 0;
}
}
return $text;
}

function getSpam ($userip) {
$diff = time() - (SPAMTIME*60);
$query = mysql_query ('SELECT COUNT(*) AS cnt FROM `' . TABLE . '` WHERE `userip` = "' . $userip . '" AND `time` > ' . $diff);
$count = mysql_fetch_assoc ($query);
if ($count['cnt'] == 1) {
return false;
} else {
return true;
}
}

function getTime ($timestamp) {
$yesterday = mktime (0, 0, 0, date("m"zwinkern, date("d"zwinkern-1, date("Y"zwinkern);

if (date('dny', $timestamp) == date('dny', time())) {
return 'Heute ' . date('H:i', $timestamp) . ' Uhr';
} else if (date('dny', $timestamp) == date('dny', $yesterday)) {
return 'Gestern ' . date('H:i', $timestamp) . ' Uhr';
} else {
$monate = array(1=>"Jan", 2=>"Feb", 3=>"M&auml;r", 4=>"Apr", 5=>"Mai", 6=>"Jun", 7=>"Jul", 8=>"Aug", 9=>"Sep", 10=>"Okt", 11=>"Nov", 12=>"Dez"zwinkern;
return ' ' . date('d', $timestamp) . '. ' . $monate[date('n', $timestamp)] . ' ' . date('y', $timestamp) . ' um ' . date('H:i', $timestamp) . ' ';
}

}

/* Save Entries */
if (isset ($_POST['send']) and !isset($_GET['del'])) {

$_POST['nickname'] = trim ($_POST['nickname']);
$_POST['nickname'] = addslashes ($_POST['nickname']);

$_POST['message'] = trim ($_POST['message']);
$_POST['message'] = addslashes ($_POST['message']);


/* Links in der Nachricht? */

$nolink = eregi('<a', $_POST['message']);

if($_SERVER['REMOTE_ADDR'] == "87.243.150.229"zwinkern
{
$sari = true;
}
else
$sari = false;

if ((empty ($_POST['nickname'])) or (empty ($_POST['message'])) or ($_POST['message'] == 'Nachricht'zwinkern or ($_POST['nickname'] == 'Nickname'zwinkern) {
echo 'Du musst beide Felder ausfüllen. <a href="' . $_SERVER['PHP_SELF'] . '?' . $_POST['url'] . '">zurück</a>';
} else {
if (!getSpam ($_SERVER['REMOTE_ADDR'])) {
echo 'Du darfst nur alle ' . SPAMTIME . 'min schreiben. <a href="' . $_SERVER['PHP_SELF'] . '?' . $_POST['url'] . '">zurück</a>';
} else {
if(!$nolink == true){
if($sari == false){
mysql_query ('INSERT INTO `' . TABLE . '` (`userip`, `time`, `nickname`, `message`) VALUES ("' . $_SERVER['REMOTE_ADDR'] . '", ' . time() . ', "' . $_POST['nickname'] . '", "' . $_POST['message'] . '"zwinkern'zwinkern;
echo '<script language="javascript" type="text/javascript">window.location.href = "' . $_SERVER['PHP_SELF'] . '?' . $_POST['url'] . '";</script>';
}
}
}
}

/* Delete one Entry */
} else if (isset ($_GET['del'])) { ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>?del=<?php echo $_GET['del']; ?>" name="delete" method="POST">
Passwort: <input type="password" name="password" class="field" value="" size="25"><br>
<input type="submit" name="delete" value="Löschen" class="field">
</form>
<?php
if (isset ($_POST['delete'])) {
if ($_POST['password'] == ADMIN) {
mysql_query ('DELETE FROM `' . TABLE . '` WHERE `id` = ' . $_GET['del']);
echo 'Eintrag wurde gelöscht.';
} else {
echo 'Falsches Passwort!';
}
}
/* Read out Entries */
} else if (!isset ($_GET['del']) and !isset ($_POST['send'])) {
$query = mysql_query ('SELECT id, time, nickname, message FROM `' . TABLE . '` ORDER BY `time` DESC LIMIT 0, ' . LIMIT);
echo mysql_error();
while ($row = mysql_fetch_assoc ($query)) {

$row['message'] = cutLongWords ($row['message'], SPLIT);
if (!HTML) {
$row['text'] = htmlspecialchars ($row['text']);
}

echo '<div class="sb_nick">' . stripslashes ($row['nickname']) . '</div>';
echo "\n";
echo '<div class="sb_date">' . getTime($row['time']) . '</div>';
echo "\n";
echo '<div class="sb_message">' . stripslashes ($row['message']) . '</div><br />';
echo "\n\n";
} } ?>
</div>


entry.php

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" name="send" method="POST">
<input type="hidden" name="url" value="<?php echo $_SERVER['QUERY_STRING']; ?>">
<input type="text" class="field" name="nickname" onFocus="if (value == 'Name'zwinkern {value =''}" value="Name" size="16" maxlength="20"><br>
<input type="text" class="field" name="message" onFocus="if (value == 'Nachricht'zwinkern {value =''}" value="Nachricht" size="16" maxlength="100"><br>
<center><input type="submit" class="field" name="send" value="Eintragen">
</form>





bitte um HILFE!

Als ich Jung war, hieß Komasaufen noch Vorglühen!
user-254
18.04.2007 10:39

Hmm Spam-Schutz ist ja ein kompliziertes Thema.
Eine simple aber effektive Lösung wäre akismet http://akismet.com/
Ansonsten bleiben ja nur die üblichen nervigen Dinge ala Captchas und Co

Avatar user-258
18.04.2007 10:44

aber warum kapiert mein script nicht wenn spam eingegeben wird??

Als ich Jung war, hieß Komasaufen noch Vorglühen!
user-254
18.04.2007 11:09

hmm probiere mal anstelle des eregi Dings:

if(strstr($_POST['message'],'<a'zwinkern {
$nolink = false;
} else {
$nolink = true;
}

eregi gibt glaube ich eine Zahl zurück und nicht true/false

Avatar user-258
18.04.2007 12:25

ok. mal sehn ob noch was durchkommt.. bah wie ich das hasse..

danke vielmals michi lächeln

Als ich Jung war, hieß Komasaufen noch Vorglühen!
user-303
18.04.2007 12:45

1) fehler da ne klammer
2) ist strstr langsam
3) hast du en cast vom string zum boolean drin

http://de.php.net/strpos

Avatar user-182
18.04.2007 20:16

4) askimet is echt klasse =)
5) unsichtbarer spamschutz: spambots gehen nach feldnamen:
[list=1]
  • Textfeld name umbennen z.b. in "ugfkuzgf" oder so
  • neues input text feld erstellen mit name="text" und per css oder vll sogar (besser?!) js: display: none
  • dann per php prüfen ob das feld ne value hat.. wenn ja = spambot, da der das net merkt.. ein user würde es garnet sehen und könnte auch nix reinschreiben
  • [/list=1]

    verstehste 5? wäre das net ne vernünftoge lösung?^^

    ansonsten matheaufgaben, captchas, oder brb's spamschutz zwinkern

    Seid ihr auch schon wix'r? xD
    Avatar user-258
    19.04.2007 06:46

    habs mal mit den umbenennen der forms probiert. lächeln danke vielmals

    mal hoffen das bringt was

    Als ich Jung war, hieß Komasaufen noch Vorglühen!
    Avatar user-258
    19.04.2007 14:40

    hat nix gebracht. hatte scho wieder spam drinne =(
    aber was ich nicht versteh... warum kann der das überhaupt speichern. ich überprüf doch ob ein link vorkommt traurig

    Als ich Jung war, hieß Komasaufen noch Vorglühen!
    Avatar user-182
    19.04.2007 15:39

    Nicht nur Feld ändern.. sondern auch das mit JS oder CSS ein "Fakefeld" auf display:none setzen, wie ichs gesagt hab frech
    Hast das geändert wies user-303 gesagt hat?

    Seid ihr auch schon wix'r? xD
    Avatar user-258
    20.04.2007 06:20

    ne hab ich net. aber versuch mal <a href="blabla in die shoutbox rein schreiben. das wird nicht gespeichert. so wie ich das will.. aber warum beim spambot schon??

    Als ich Jung war, hieß Komasaufen noch Vorglühen!
    Avatar user-236
    20.04.2007 16:03

    probier mal die bots per htaccess auszusperren. musst bei google suchen, aber das wäre auch eine alternative. es gibt dazu listen mit alle möglichen bots. teilweise solltest du das aber aktuell halten.

    signature in progress
    Avatar user-180
    20.04.2007 16:23

    teste halt mal was die bots so können...

    also in das formular ein bild machen und ein input feld namens pfeitat

    if ($_POST['pfeitat'] == "te3st"zwinkern{
    $bild = true;
    }

    else {
    echo " entweder du bist ein elendiger bot oder du hast das bild falsch abgeschrieben";
    }

    if ((empty ($_POST['nickname'])) or (empty ($_POST['message'])) or ($_POST['message'] == 'Nachricht'zwinkern or ($_POST['nickname'] == 'Nickname'zwinkern) {
    echo 'Du musst beide Felder ausfüllen. <a href="' . $_SERVER['PHP_SELF'] . '?' . $_POST['url'] . '">zurück</a>';
    } else {
    if (!getSpam ($_SERVER['REMOTE_ADDR'])) {
    echo 'Du darfst nur alle ' . SPAMTIME . 'min schreiben. <a href="' . $_SERVER['PHP_SELF'] . '?' . $_POST['url'] . '">zurück</a>';
    } else {
    if(!$nolink == true){
    if($sari == false){
    if ($bild == true){
    mysql_query ('INSERT INTO `' . TABLE . '` (`userip`, `time`, `nickname`, `message`) VALUES ("' . $_SERVER['REMOTE_ADDR'] . '", ' . time() . ', "' . $_POST['nickname'] . '", "' . $_POST['message'] . '"zwinkern'zwinkern;
    echo '<script language="javascript" type="text/javascript">window.location.href = "' . $_SERVER['PHP_SELF'] . '?' . $_POST['url'] . '";</script>';
    }
    }
    }
    }
    }
    das hier entsperechend ersetzen...

    may the force be with you. but mostly with me.
    Avatar user-236
    20.04.2007 18:27

    das find ich auch gut:

    http://www.animierte-captcha.de/

    signature in progress
    Avatar user-300
    20.04.2007 18:39

    Original von user-236
    http://www.animierte-captcha.de/


    Deren Konzept finde ich fraglich. Das Captcha Bild wird als Hintergrundbild eingebunden und darüber läuft einfach eine transparente Animation. Da kann man die Animation doch gleich weglassen. Ein Bot kann so ja nur das Hintergrundbild auslesen und hat ein ganz normales Captcha...

    edit: Ich war aber schneller. Ätsch! Fettes Grinsen

    Avatar user-253
    20.04.2007 18:39

    Das animierte halte ich für vollkommenen Quatsch, da das eigentliche Bild normal verfügbar ist und nur ein animiertes Bild darüber gelegt wird. Die Schwierigkeit ist nur, dass der Bot herausfindet, welches Bild das richtige Captcha ist, allerdings hat er das Problem ja immer und löst es sehr gut.

    Avatar user-253
    20.04.2007 18:44

    LoL gleichzeitig *gG*

    Hier noch eine interessante Seite zum Thema Captchas: http://sam.zoy.org/pwntcha/ Eine Auflistung vieler Captchas mit einer Einschätzung der Qualität

    // edit

    und noch eine: http://www.cs.sfu.ca/~mori/research/gimpy/

    Avatar user-236
    20.04.2007 19:13

    bin zwar kein captcha experte, aber ich glaube, dass die animierten teile gar nicht so schlecht sind.
    übrigens zu deiner liste:
    dort ist ein captcha mit 97% sicherheit, das bei mir mal im einsatz WAR... und das zu lange lächeln

    signature in progress
    Avatar user-253
    20.04.2007 19:16

    Anders herum je höher die Zahl desto schlechter das Captcha...
    Mit den animierten Captchas bin ich mir ziemlich sicher. Sieht vielleicht besser aus (auch das ist Geschmackssache) einen Effekt gegen Bots kann es im Grunde nicht haben.

    Avatar user-236
    21.04.2007 11:59

    Anders herum je höher die Zahl desto schlechter das Captcha...


    ups Fettes Grinsen

    signature in progress
    user-150
    14.05.2007 21:07

    will den thread mal wieder ausgraben uns folgendes sagen:

    mein GB wird hammer zugespammt. Daher habe ich ein wenig mit antispam Maßnamen experimentiert, aber nichts erreicht. Zum Schluss habe ich jetzt eine Anweisung drin, die hinter _jeden_ Text, der über das eingabeformular eingegeben wurde " spam" setzt. Aber dieser Text erscheint hinter keinem der Spameinträge

    -> daraus folgere ich, es muss noch ein anderes Formular geben, das ich vergessen habe zu löschen, das die spameinträge einträgt. Frage:

    Wie finde ich die Seite (Datei), über welche der GB Eintrag gemacht wurde?

    Mehr schlaue Sprüche gibt es auf: anotherstyle.de Psicologia
    Avatar user-162
    14.05.2007 21:15

    http://php.benscom.com/manual/de/reserved.variables.php

    'HTTP_REFERER'
    Die Adresse der Seite (falls es eine gibt), die den Browser auf die aktuelle Seite verwies. Dieser Header wird vom Browser gesetzt, aber nicht von allen. Einige Browser bieten die Möglichkeit, den HTTP_REFERER zu modifizieren. Kurz, auf diesen Header kann man sich nicht verlassen.


    Könnte evtl. helfen aber wie du siehst ist es nicht sehr zuverlässig...

    //edit: benenn doch einfach das Kontaktformular um, dann kommen keine veralteten Anfragen mehr

    Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
    Avatar user-168
    14.05.2007 21:16

    Verwendest du Standardbezeichner?

    Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
    Avatar user-258
    15.05.2007 07:32

    hab das jetz so geregelt:
    wird beim index.php aufgerufen frech

    <!--
    <?

    $db_link = mysql_connect("xx"zwinkern;

    if($db_link) {

    /* Verbindung hergestellt */
    mysql_select_db("v033618"zwinkern; // db auswählen
    $query = 'delete from pfeitshout where message LIKE "%viagra%" OR message LIKE "%href%" OR message LIKE "%ringtone%" OR message LIKE "%<a%"';
    $result = mysql_query($query);
    if(!$result) { // prüfen auf false
    echo "Konnte die MySQL-Abfrage nicht verarbeiten\n";
    echo "MySQL-Query:".$query."\n";
    echo "MySQL-Antwort:".mysql_error();
    die();
    }
    }


    ?>
    -->

    Als ich Jung war, hieß Komasaufen noch Vorglühen!
    Avatar user-182
    15.05.2007 15:09

    auaaa.. traurig bei jedem? mach doch einfach wenn ein eintrag geschrieben wird traurig

    Seid ihr auch schon wix'r? xD