Bekijk Volledige Versie : Woorden afschermen met cgi
Hallo,
Ik gebruik voor enkele websites een gastenboek, dat is gemaakt met cgi.
Deze gastenboeken zijn nogal gemakkelijk te vullen door spammers. Om
dit soort spam buiten te houden, wil ik graag het cgi-script aanpassen.
Ik wil ervoor zorgen dat een bericht dat wordt geplaatst, bepaalde
woorden niet mag bevatten. Als een dergelijk woord wel in het bericht
staat, dan wordt deze niet geplaatst. De overige berichten wel.
Heeft iemand een idee hoe ik dit gemakkelijk in cgi kan oplossen?
Ik hoop dat iemand mij hierbij kan helpen. Ik ben al een lange tijd
naar een oplossing op zoek. Mijn kennis van cgi is alleen niet zo goed,
dat ik dit zelf gemakkelijk kan toevoegen.
Rene Pijlman
19/05/06, 23:20
Saro:
>Ik wil ervoor zorgen dat een bericht dat wordt geplaatst, bepaalde
>woorden niet mag bevatten. Als een dergelijk woord wel in het bericht
>staat, dan wordt deze niet geplaatst. De overige berichten wel.
>Heeft iemand een idee hoe ik dit gemakkelijk in cgi kan oplossen?
Met een if-then-else waarschijnlijk, afhankelijk van in welke
programmeertaal het script is geschreven.
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
Hoef je dat in zo'n geval één keer aan te roepen? Of moet je dat ook
herhalen bij het gedeelte waarin je het bericht wegschrijft?
En kun je daar een standaard-regel voor gebruiken? Ik had namelijk al
iets geprobeerd als:
if($bericht =~ m/casino/) {
die("Bericht mag geen casino bevatten");
Maar dat pakte niet uit zoals ik had gehoopt :s
Jan Reilink
20/05/06, 00:40
Saro wrote:
> Hoef je dat in zo'n geval één keer aan te roepen? Of moet je dat ook
> herhalen bij het gedeelte waarin je het bericht wegschrijft?
>
> En kun je daar een standaard-regel voor gebruiken? Ik had namelijk al
> iets geprobeerd als:
> if($bericht =~ m/casino/) {
> die("Bericht mag geen casino bevatten");
>
> Maar dat pakte niet uit zoals ik had gehoopt :s
>
Is
if($bericht =~ /casino/i) {
exit();
}
al niet voldoende?
Eventueel in een array:
@badUrl = ("viagra", "casino", "gamble", "pharmacy", "bad-credit",
"lorazepam", "cialis");
for my $Spamurl (@badUrl) {
if ($bericht =~ /$Spamurl/i) {
exit();
}
}
--
Met vriendelijke groet / Best regards,
Jan Reilink, VEVIDA Nederland BV
Postbus 329, 9700 AH GRONINGEN, +31(0)50 - 5492234
Ja, dat werkt! Dat houdt in ieder geval dat soort spam-berichten
buiten.
Ik probeerde de gebruiker vervolgens terug te redirecten naar het
gastenboek, maar krijg dan de melding:
Status: 302 Moved Location
Enig idee waar die melding vandaan komt?
Rene Pijlman
20/05/06, 02:40
Saro:
>Status: 302 Moved Location
>
>Enig idee waar die melding vandaan komt?
Die komt misschien van een webserver.
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
Nico Schuyt
20/05/06, 11:20
Saro wrote:
> Ik gebruik voor enkele websites een gastenboek, dat is gemaakt met
> cgi. Deze gastenboeken zijn nogal gemakkelijk te vullen door
> spammers. Om dit soort spam buiten te houden, wil ik graag het
> cgi-script aanpassen.
> Ik wil ervoor zorgen dat een bericht dat wordt geplaatst, bepaalde
> woorden niet mag bevatten. Als een dergelijk woord wel in het bericht
> staat, dan wordt deze niet geplaatst. De overige berichten wel.
> Heeft iemand een idee hoe ik dit gemakkelijk in cgi kan oplossen?
Ik vraag me af of zoiets werkt.
Overweeg om de berichtjes in een tabel in een database te zetten. De
beheerder krijgt een mailtje dat er een nieuw berichtje is. Tonen op de site
pas als de beheerder van die site het gelezen en gemarkeerd heeft.
Eenvoudiger: Het bericht wordt eerst per e-mail verstuurd en, bij accoord,
door de beheerder gekopieerd en op de site gezet.
--
Nico Schuyt
http://www.nicoschuyt.nl/
Jan Reilink
20/05/06, 12:00
Saro wrote:
> Ja, dat werkt! Dat houdt in ieder geval dat soort spam-berichten
> buiten.
> Ik probeerde de gebruiker vervolgens terug te redirecten naar het
> gastenboek, maar krijg dan de melding:
>
> Status: 302 Moved Location
>
> Enig idee waar die melding vandaan komt?
>
Zoals Rene al zegt, van de webserver :)
Hoe redirect je de bezoeker terug naar het gastenboek?
@badUrl = ("viagra", "casino", "gamble", "pharmacy", "bad-credit",
"lorazepam", "cialis");
for my $Spamurl (@badUrl) {
if ($bericht =~ /$Spamurl/i) {
print $query->redirect($guestbookurl);
exit();
}
}
Waarbij $guestbookurl de URL naar het gastenboek is natuurlijk. En
hierbij wordt gebruik gemaakt van een CGI object $query:
use CGI; # load CGI routines
$query = new CGI; # create new CGI object
--
Met vriendelijke groet / Best regards,
Jan Reilink, VEVIDA Nederland BV
Postbus 329, 9700 AH GRONINGEN, +31(0)50 - 5492234
Nog even niet de tijd gehad om te reageren, maar inmiddels heb ik het
werkend gekregen dankzij deze tip. Nu kan ik gewoon alle berichten met
een url laten blokkeren. Geen last meer van spam voorlopig.
De redirect is alleen nog niet gelukt, ik krijg juist die foutmelding
als ik bovenstaande code gebruik. Maar dat zal wel met
serverinstellingen te maken hebben. Dat is ook uiteindelijk niet het
ergste probleem.
Bedankt dus!
Jan Reilink
24/05/06, 09:40
Saro schreef:
> Nog even niet de tijd gehad om te reageren, maar inmiddels heb ik het
> werkend gekregen dankzij deze tip. Nu kan ik gewoon alle berichten met
> een url laten blokkeren. Geen last meer van spam voorlopig.
> De redirect is alleen nog niet gelukt, ik krijg juist die foutmelding
> als ik bovenstaande code gebruik. Maar dat zal wel met
> serverinstellingen te maken hebben. Dat is ook uiteindelijk niet het
> ergste probleem.
> Bedankt dus!
>
Dan kan je altijd nog een meta-refresh printen:
print "<meta http-equiv=\"refresh\" content=\"0; url=$guestbookurl\">\n";
--
Met vriendelijke groet / Best regards,
Jan Reilink
VEVIDA Nederland B.V., janreilink@vevida.nl
Postbus 329, 9700 AH GRONINGEN, +31(0)50 - 5492234
Ja super, Jan! Dan werkt het. Geweldig :-)
Martien van Wanrooij
15/08/06, 23:46
"Jan Reilink" <janreilink@vevida.nl> schreef in bericht
news:446e4133$0$31653$e4fe514c@news.xs4all.nl...
Saro wrote:
if($bericht =~ /casino/i) {
exit();
}
Ik zie hier een stukje code dat ik nog niet ken namelijk dat
is-gelijktekentje gevolgd door een tilde en dan nog een string /casino/i
die niet tussen aanhalingstekens staat (ik neem tenminste aan dat dat een
string is). Kan iemand me uitleggen wat dat precies doet? In google kon ik
bij trefwoorden als php operator tilde enz. niets vinden.
Martien.
Martien van Wanrooij
15/08/06, 23:46
Zo te zien lukt het me niet dit bericht te annuleren maar ik had niet in de
gaten dat het hier om Perl ging en niet om php sorry voor het ongemak