Formular, Spamschutz gegen Domaineinträge

Probleme, zu anderen Scripten auf stoppt-den-spam.info

Moderator: frameguard

Formular, Spamschutz gegen Domaineinträge

Beitragvon Husky » 11.06.2007, 19:49

Hallo Zusammen,

dank eurer Hilfe hier habe ich ein Formular (mit NOF erstellt) laufen welches gut durch ein Captcha geschützt wird.
Leider gibt es doch noch fleißige Hände die meinen das Formular - scheinbar - von Hand ausfüllen zu müssen mit ihren Spam URL Einträgen.

Frage, da NOF es nicht anbietet: Kann ich eine gesamte php Seite pauschal gegen URL Einträge schützen?

Ein Lösungsansatz habe ich von einem Nofler bekommen der da lautet:

den Eintrag in eine Variable setzen z.B. $post_text
dann

if
// Gibt true zurück, falls "http" irgendwo in $post_text gefunden wird
ereg("http", $post_text);
{
echo "Bitte keine URL posten";
}
else
{
//hier jetzt den normalen Vorgang rein
}

Nur, dann muss ich jedes Eingabefeld einzeln als Variable deklarieren - und zudem weiß ich auch - ehrlich gesagt - nicht genau wie man das einbaut.

Habt Ihr Ideen um eine Lösung herbeizuführen - würde mich freuen.

LG
Husky
Husky
 
Beiträge: 13
Registriert: 19.01.2007, 12:35

Beitragvon frameguard » 25.06.2007, 16:22

Eine andere Lösung wüßte ich da auch nicht, als die Eingaben in Variablen zu übergeben und dann einzeln zu überprüfen. Das kannst aber dann eh verschachteln: IF (ereg("http", $post_text) OR ereg("http", $post_text2) OR...);
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Formular, Spamschutz gegen Domaineinträge

Beitragvon Husky » 25.06.2007, 20:30

frameguard hat geschrieben:Eine andere Lösung wüßte ich da auch nicht, als die Eingaben in Variablen zu übergeben und dann einzeln zu überprüfen. Das kannst aber dann eh verschachteln: IF (ereg("http", $post_text) OR ereg("http", $post_text2) OR...);


Hallo Frameguard,
danke für die Info. Verschachtelt hört sich schon ganz gut an. Ich habe aber, ehrlich gesagt, keine Ahnung wie ich das einbauen muss - kannst du mir helfen?
Husky
 
Beiträge: 13
Registriert: 19.01.2007, 12:35

Beitragvon frameguard » 25.06.2007, 20:42

Kann ich sicher, wenn ich das Formular kenne. *g*

Aber prinzipiell, nehmen wir einmal an, Du hast im Formular die Eingabe-Felder "name" und "content" (zB bei einem Gästebuch), dann schreibst Du in der zweiten PHP-Datei, die also das Formular auswerten soll:

$name = $_POST['name'];
$comment= $_POST['comment'];

Auf die Art weist Du die Formulareingaben Variablen zu.

Ich habe in meinem Gästebuch eine "Banlist", d. h., ich sperre nicht nur den String "http://", sondern auch andere, wie "Viagra" oder "Cialis". Das mache ich so, daß ich die gesperrten Wörter in eine Textdatei geschrieben habe, jedes in eine eigene Zeile, und die Datei nannte ich "bw.txt".

Die Funktion, die mir nun alle Eingaben auf "verbotene" Wörter überprüft, schaut dann so aus:

Code: Alles auswählen
/* Begin Banlist check */
$bw="bw.txt";
$blacklist = file($bw);
function blacklist_check($text, $blacklist){
        foreach ($blacklist as $line_num => $line) {
             $line = trim($line);
             /* echo('Geprüfter Text: '.$text.' auf '.$line.' mit stristr(), Ergebnis: '.stristr($text, $line).' ...<br>'); */
             if(stristr($text, $line)) {
                echo 'Sie haben folgendes unerwünschte Schlüsselwort eingegeben: ';
                echo '<strong><font color=red>'.$line.'</font><br>';
                die ('SPAM ist hier UNERWÜNSCHT!!!</strong>');
          }
        }
return;
}
blacklist_check($comment, $blacklist);
blacklist_check($name, $blacklist);

/* End Banlist check */


Ich denke mal, die kannst relativ leicht Deinen Bedürfnissen anpassen, Du brauchst nur eine bw.txt mit den banned words, und schreibst einfach für jedes Eingabefeld blacklist_check(zu prüfende Variable,$blacklist);.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon Husky » 26.06.2007, 00:41

Hallo frameguard - danke für deine Hilfe!

Das hört sich alles sooooooooooo leicht und gut an ....

So, was hab ich: Ich habe eine Formularseite die auch schon gewisse Feldüberpüfungen (Pflichtfeld, dies ist keine richtige E-Mail-Adresse usw.) macht - aber scheinbar alles in ein und derselben php(???).

Dann habe ich eine zweite php die das captcha überprüft und dann eben die Formulareingaben per Mail versendet.

Nun muss ja erst die badworth liste und die URL überprüfung gestartet und gegebenenfalls "angemotzt" werden bevor das captcha überprüft wird, richtig? Wäre das dann so richtig?

Unverändert sieht die php so aus:
<?php
session_start();

function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
... hier gehts dann weiter zur captcha überprüfung etc.
-------------------------------------------------------

Hier jetzt nach der änderung:
-------------------------------------------------------

<?php

$name = $_POST['name'];
$comment= $_POST['comment'];

/* Begin Banlist check */
$bw="bw.txt";
$blacklist = file($bw);
function blacklist_check($text, $blacklist){
foreach ($blacklist as $line_num => $line) {
$line = trim($line);
/* echo('Geprüfter Text: '.$text.' auf '.$line.' mit stristr(), Ergebnis: '.stristr($text, $line).' ...<br>'); */
if(stristr($text, $line)) {
echo 'Sie haben folgendes unerwünschte Schlüsselwort eingegeben: ';
echo '<strong><font color=red>'.$line.'</font><br>';
die ('SPAM ist hier UNERWÜNSCHT!!!</strong>');
}
}
return;
}
blacklist_check($comment, $blacklist);
blacklist_check($name, $blacklist);

/* End Banlist check */

session_start();

function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
... hier gehts dann weiter zur captcha überprüfung etc.
-------------------------------------------------------

Dann nächste Frage: Die Variablenbezeichnungen - sind das die Feld ID's oder Feld Namen die ich eintragen muss?

Dann die zu blockierenden URL: Kann ich dem script mitteilen das alles angemotzt wird was mit http oder www anfängt und bis zum ersten Leerzeichen als Pfad folgt nicht erlaubt ist?

Wäre es hilfreich wenn ich dir die beiden Dateien per pm sende - dann kannst du dir vielleicht ein besseres Bild machen. Ich hab das gefühl das ich mich nicht so ganz verständlich ausdrücke ... :oops:

LG
Husky
Husky
 
Beiträge: 13
Registriert: 19.01.2007, 12:35

Beitragvon frameguard » 26.06.2007, 13:57

Fast besser, Du schickst mir wenn, dann die kompletten php-Dateien per Mail an frameguard (at) literaturforum.or.at

Zu den Variablen:

Wenn Du zB ein Formularfeld hast:
<input type="text" name="name" size=20 maxlength="20">

dann übergibt ein Klick auf den Absenden-Knopf den dort eingegebenen Text mit dem Bezeichner "name" an das verarbeitende Formular.

PHP liest das dann mit $_POST['name']; aus und übergibt es in der Zeile
$name = $_POST['name']; an eine Variable, die $name heißt. Du könntest die Variable auch "tripstrill" nennen, PHP ist das völlig wurscht:
$tripstrill = $_POST['name']; übergibt das halt dann in eine Variable $tripstrill. *g* ;)

Dann die zu blockierenden URL: Kann ich dem script mitteilen das alles angemotzt wird was mit http oder www anfängt und bis zum ersten Leerzeichen als Pfad folgt nicht erlaubt ist?

Sicher, da schreibst Du dann in die bw.txt einfach hinein:
http
www


Eines ist mir allerdings an Deinem Script-Entwurf aufgefallen: Das beliebte session_start();. Das gehört immer an den Anfang der Datei, direkt nach <?, und es dürfen vorher auch keine HTML-Header geschrieben sein, sonst kriegst eine Fehlermeldung.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon Husky » 26.06.2007, 19:03

Hallo frameguard - danke, pn ist unterwegs.
Husky
 
Beiträge: 13
Registriert: 19.01.2007, 12:35

Beitragvon frameguard » 27.06.2007, 17:14

Schon gekriegt, hab gerade zurückgeschrieben. :)
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien


Zurück zu Sonstiges

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron