Stoppt-den-Spam.info Foren-Übersicht
RegistrierenSuchenFAQMitgliederlisteBenutzergruppenLogin
Formular, Spamschutz gegen Domaineinträge

 
Neues Thema eröffnen   Neue Antwort erstellen    Stoppt-den-Spam.info Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Husky



Anmeldedatum: 19.01.2007
Beiträge: 13

BeitragVerfasst am: 11.06.2007, 17:49    Titel: Formular, Spamschutz gegen Domaineinträge Antworten mit Zitat

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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frameguard



Anmeldedatum: 05.03.2007
Beiträge: 117
Wohnort: Wien

BeitragVerfasst am: 25.06.2007, 14:22    Titel: Antworten mit Zitat

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...);
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Husky



Anmeldedatum: 19.01.2007
Beiträge: 13

BeitragVerfasst am: 25.06.2007, 18:30    Titel: Formular, Spamschutz gegen Domaineinträge Antworten mit Zitat

frameguard hat Folgendes 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?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frameguard



Anmeldedatum: 05.03.2007
Beiträge: 117
Wohnort: Wien

BeitragVerfasst am: 25.06.2007, 18:42    Titel: Antworten mit Zitat

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:
/* 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);.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Husky



Anmeldedatum: 19.01.2007
Beiträge: 13

BeitragVerfasst am: 25.06.2007, 22:41    Titel: Antworten mit Zitat

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 ... Embarassed

LG
Husky
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frameguard



Anmeldedatum: 05.03.2007
Beiträge: 117
Wohnort: Wien

BeitragVerfasst am: 26.06.2007, 11:57    Titel: Antworten mit Zitat

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* Wink

Zitat:
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:
Zitat:
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Husky



Anmeldedatum: 19.01.2007
Beiträge: 13

BeitragVerfasst am: 26.06.2007, 17:03    Titel: Antworten mit Zitat

Hallo frameguard - danke, pn ist unterwegs.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frameguard



Anmeldedatum: 05.03.2007
Beiträge: 117
Wohnort: Wien

BeitragVerfasst am: 27.06.2007, 15:14    Titel: Antworten mit Zitat

Schon gekriegt, hab gerade zurückgeschrieben. Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Stoppt-den-Spam.info Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT
Seite 1 von 1

 
  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
You can attach files in this forum
You can download files in this forum