| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Husky
Anmeldedatum: 19.01.2007 Beiträge: 13
|
Verfasst am: 11.06.2007, 17:49 Titel: Formular, Spamschutz gegen Domaineinträge |
|
|
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 |
|
 |
frameguard
Anmeldedatum: 05.03.2007 Beiträge: 117 Wohnort: Wien
|
Verfasst am: 25.06.2007, 14:22 Titel: |
|
|
| 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 |
|
 |
Husky
Anmeldedatum: 19.01.2007 Beiträge: 13
|
Verfasst am: 25.06.2007, 18:30 Titel: Formular, Spamschutz gegen Domaineinträge |
|
|
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 |
|
 |
frameguard
Anmeldedatum: 05.03.2007 Beiträge: 117 Wohnort: Wien
|
Verfasst am: 25.06.2007, 18:42 Titel: |
|
|
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 |
|
 |
Husky
Anmeldedatum: 19.01.2007 Beiträge: 13
|
Verfasst am: 25.06.2007, 22:41 Titel: |
|
|
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 ...
LG
Husky |
|
| Nach oben |
|
 |
frameguard
Anmeldedatum: 05.03.2007 Beiträge: 117 Wohnort: Wien
|
Verfasst am: 26.06.2007, 11:57 Titel: |
|
|
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*
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 |
|
 |
Husky
Anmeldedatum: 19.01.2007 Beiträge: 13
|
Verfasst am: 26.06.2007, 17:03 Titel: |
|
|
| Hallo frameguard - danke, pn ist unterwegs. |
|
| Nach oben |
|
 |
frameguard
Anmeldedatum: 05.03.2007 Beiträge: 117 Wohnort: Wien
|
Verfasst am: 27.06.2007, 15:14 Titel: |
|
|
Schon gekriegt, hab gerade zurückgeschrieben.  |
|
| Nach oben |
|
 |
|
|
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
|
|