SPAM Filter
Hierbij een handige PHP spam filter voor als bijv. je gastenboek wordt gespamd. Dat was bij mij het geval, vandaar dat ik deze PHP spam filter geschreven heb.
'$message' is het gastenboek bericht.
Je moet wel een extra kolom aanmaken in de tabel met de naam 'spam'. Je kunt de spam berichten dan onafhankelijk van de echte berichten tonen. Zo kun je de spam berichten in één keer verwijderen, maar het toch eerst even controleren.
Gesponsorde koppelingen
PHP script bestanden
22 reacties op 'SPAM Filter'
Gesponsorde koppelingen
Waarom gebruikt nooit iemand stristr(), maar altijd strpos of ereg...
Volgens mij zijn beide varianten namelijk langzamer dan stristr.
Volgens mij zijn beide varianten namelijk langzamer dan stristr.
Ikzelf houd niet zo van CAPTCHA's (behalve hotcaptcha's dan), vragen, spamfilters en dergelijke. Ze zijn alleen maar irritant.
Geef mij maar gewoon Akismet. Heel handige service. Degene die een WordPress weblog hebben zullen het waarschijnlijk wel kennen en weten vast ook dat het heel goed werkt.
Laatst had ik een klasse geschreven die het werken met de service makkelijker maakt. Ik zal er nog eens naar kijken en hem zo dan even hier neerzetten :)
En als je het Zend Framework gebruikt, zit daar zelfs al een Akismetmodule in :)
Geef mij maar gewoon Akismet. Heel handige service. Degene die een WordPress weblog hebben zullen het waarschijnlijk wel kennen en weten vast ook dat het heel goed werkt.
Laatst had ik een klasse geschreven die het werken met de service makkelijker maakt. Ik zal er nog eens naar kijken en hem zo dan even hier neerzetten :)
En als je het Zend Framework gebruikt, zit daar zelfs al een Akismetmodule in :)
Leuk idee, maar zeker niet waterdicht. Spam is ook alleen de tekst "Nice site", of "Perfect site", of iets van "DKJF903qwLKJ". Moet je dan op "Perfect" gaan filteren??
Ik heb dit probleem ook een tijd gekent en het zo proberen op te lossen, maar er kwamen toch steeds spamberichtjes door. Ik heb het opgelost door de bezoeker een plaatje te laten overtypen en dan een cookie op hun compu te plaatsen als ze het goed hebben. Deze cookie toont aan dat ze een echte gebruiker zijn, dus ze hoeven niet nogmaals het plaatje over te typen.
De code kan ook zo (maar er zijn natuurlijk duizenden manieren):
Voordeel hierbij is dat je geen loop hoeft te gebruiken.
Ik heb dit probleem ook een tijd gekent en het zo proberen op te lossen, maar er kwamen toch steeds spamberichtjes door. Ik heb het opgelost door de bezoeker een plaatje te laten overtypen en dan een cookie op hun compu te plaatsen als ze het goed hebben. Deze cookie toont aan dat ze een echte gebruiker zijn, dus ze hoeven niet nogmaals het plaatje over te typen.
De code kan ook zo (maar er zijn natuurlijk duizenden manieren):
Code (php)
Voordeel hierbij is dat je geen loop hoeft te gebruiken.
Met Cookies werkt het prima. De bot krijgt de cookie niet zomaar. Hij moet wel eerst het plaatje (met cijfers en letters) overtypen.
De afgelopen 2 jaar is er geen 1 spambericht doorgekomen, terwijl het daarvoor echt zeer vaak gebeurde.
Ik heb zoiets bovenaan de bron staan
Deze code dient als check voordat bericht in gastenboek gezet wordt
Misschien een onduidelijke regel (regel 6):
//een soort tempcookie. code is goed ingevoerd, maar de naam hoeft dan niet ingevoerd te zijn
Dit houdt in: Stel iemand vult de code wel goed in, maar heeft het bericht (of de naam) niet ingevoerd. Het bericht wordt dan niet geplaatst, maar omdat de gebruiker bewezen heeft dat hij geen bot is, krijgt hij toch een cookie. Zo hoeft hij dus (ook bij een fout) niet de code opnieuw in te voeren.
Let op! De code heb ik puur gekopieerd en geplakt vanuit mijn systeem, dus (indien je geinteresseerd bent) je moet de touwtjes nog aan elkaar knopen.
De afgelopen 2 jaar is er geen 1 spambericht doorgekomen, terwijl het daarvoor echt zeer vaak gebeurde.
Ik heb zoiets bovenaan de bron staan
Code (php)
Deze code dient als check voordat bericht in gastenboek gezet wordt
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
//gebruiker onbekend
if (!$ckRealUser){
//code goed ingevoerd > is echte gebruiker > plaats cookie
if (is_numeric($pCodeValid) && $pCodeValid == $pCodeInput){
//een soort tempcookie. code is goed ingevoerd, maar de naam hoeft dan niet ingevoerd te zijn
setcookie(COOKIENAME, ' ', $ckDate);
$ckRealUser = true;
//code incorrect > misschien door spam > foutmelding
} else {
$messResponse .= '
- De ingevoerde <b>code is onjuist</b>';
$objJS->setFocus('fldValidate');
}
}
if ($messResponse){
//ERRORMESSAGE AANMAKEN
$messResponse = setResponse('<b>Bericht niet opgeslagen</b><br />'.$messResponse, false, $messX, $messY);
}
elseif ($ckRealUser){
//DATA IS VALIDE > BERICHT TOEVOEGEN IN DATABASE
setcookie(COOKIENAME, $pNaam, $ckDate);
$objDB->query("INSERT INTO gb_bericht (gb_berichtNaam, gb_berichtBericht, gb_berichtIP) VALUES ('".$pNaam."', '".$pBericht."', '".$_SERVER['REMOTE_ADDR']."');");
header('Location: '.SELF.'/posted');
} else {
$messResponse = setResponse('<b>Bericht niet opgeslagen</b><br />- Uw browser accepteert geen cookies', false, $messX, $messY);
}
?>
//gebruiker onbekend
if (!$ckRealUser){
//code goed ingevoerd > is echte gebruiker > plaats cookie
if (is_numeric($pCodeValid) && $pCodeValid == $pCodeInput){
//een soort tempcookie. code is goed ingevoerd, maar de naam hoeft dan niet ingevoerd te zijn
setcookie(COOKIENAME, ' ', $ckDate);
$ckRealUser = true;
//code incorrect > misschien door spam > foutmelding
} else {
$messResponse .= '
- De ingevoerde <b>code is onjuist</b>';
$objJS->setFocus('fldValidate');
}
}
if ($messResponse){
//ERRORMESSAGE AANMAKEN
$messResponse = setResponse('<b>Bericht niet opgeslagen</b><br />'.$messResponse, false, $messX, $messY);
}
elseif ($ckRealUser){
//DATA IS VALIDE > BERICHT TOEVOEGEN IN DATABASE
setcookie(COOKIENAME, $pNaam, $ckDate);
$objDB->query("INSERT INTO gb_bericht (gb_berichtNaam, gb_berichtBericht, gb_berichtIP) VALUES ('".$pNaam."', '".$pBericht."', '".$_SERVER['REMOTE_ADDR']."');");
header('Location: '.SELF.'/posted');
} else {
$messResponse = setResponse('<b>Bericht niet opgeslagen</b><br />- Uw browser accepteert geen cookies', false, $messX, $messY);
}
?>
Misschien een onduidelijke regel (regel 6):
//een soort tempcookie. code is goed ingevoerd, maar de naam hoeft dan niet ingevoerd te zijn
Dit houdt in: Stel iemand vult de code wel goed in, maar heeft het bericht (of de naam) niet ingevoerd. Het bericht wordt dan niet geplaatst, maar omdat de gebruiker bewezen heeft dat hij geen bot is, krijgt hij toch een cookie. Zo hoeft hij dus (ook bij een fout) niet de code opnieuw in te voeren.
Let op! De code heb ik puur gekopieerd en geplakt vanuit mijn systeem, dus (indien je geinteresseerd bent) je moet de touwtjes nog aan elkaar knopen.
kan iemand mij vertellen waar ik het spamfilter neer moet zetten in mijn code. bij werkt ie namelijk niet.....
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(!$rMySQLQuery = mysql_query("INSERT INTO replys (topic_id,reply_poster,reply_date,reply_message)
VALUES('".$_GET['topic_id']."','".$_SESSION['gebruiker']."',NOW(),'".addslashes($_POST['reply_message'])."');"))
{
message_die();
}
if(!$rMySQLQuery = mysql_query("SELECT member_posts,member_username FROM members WHERE member_username = '".$_SESSION['gebruiker']."'"))
{
message_die();
}
$aFetch = mysql_fetch_assoc($rMySQLQuery);
$aFetch['member_posts'] = (int) $aFetch['member_posts'] + 1;
if(!$rMySQLQuery = mysql_query("UPDATE members SET member_posts = '".$aFetch['member_posts']."' WHERE member_username = '".$_SESSION['gebruiker']."'"))
{
message_die();
}
print '<script language="javascript"> location="view_topic.php?style='.$_GET['style'].'&forum_id='.$_GET['forum_id'].'&topic_id='.$_GET['topic_id'].'"; </script>';
}
else
{
$spam = false;
$bad_words = array('teen', 'viagra', 'order'); //etc...
if (eregi(implode('|', $bad_words), $reply_poster))
$spam = true;
?>
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(!$rMySQLQuery = mysql_query("INSERT INTO replys (topic_id,reply_poster,reply_date,reply_message)
VALUES('".$_GET['topic_id']."','".$_SESSION['gebruiker']."',NOW(),'".addslashes($_POST['reply_message'])."');"))
{
message_die();
}
if(!$rMySQLQuery = mysql_query("SELECT member_posts,member_username FROM members WHERE member_username = '".$_SESSION['gebruiker']."'"))
{
message_die();
}
$aFetch = mysql_fetch_assoc($rMySQLQuery);
$aFetch['member_posts'] = (int) $aFetch['member_posts'] + 1;
if(!$rMySQLQuery = mysql_query("UPDATE members SET member_posts = '".$aFetch['member_posts']."' WHERE member_username = '".$_SESSION['gebruiker']."'"))
{
message_die();
}
print '<script language="javascript"> location="view_topic.php?style='.$_GET['style'].'&forum_id='.$_GET['forum_id'].'&topic_id='.$_GET['topic_id'].'"; </script>';
}
else
{
$spam = false;
$bad_words = array('teen', 'viagra', 'order'); //etc...
if (eregi(implode('|', $bad_words), $reply_poster))
$spam = true;
?>
@Wessel:
eregi is anders dan ereg. eregi is NIET hoofdlettergevoelig. Maar dan heb je weer dat worden als teentjes (ik noem maar wat) ook niet mag. Dan zou je het bericht moeten exploden op spaties. Dan krijg je een array met alle woorden. Dan met in_array(); kan je ware slechte woorden vinden. (misschien kan het nog efficienter, maar dit komt even in me op)
@Killerpuppy:
floodprotection? Met soms bedoel ik +/- 3 berichten per dag.
@Daan:
Ik denk aan zoiets
eregi is anders dan ereg. eregi is NIET hoofdlettergevoelig. Maar dan heb je weer dat worden als teentjes (ik noem maar wat) ook niet mag. Dan zou je het bericht moeten exploden op spaties. Dan krijg je een array met alle woorden. Dan met in_array(); kan je ware slechte woorden vinden. (misschien kan het nog efficienter, maar dit komt even in me op)
@Killerpuppy:
floodprotection? Met soms bedoel ik +/- 3 berichten per dag.
@Daan:
Ik denk aan zoiets
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$spam = false;
$bad_words = array('teen', 'viagra', 'order'); //etc...
if (eregi(implode('|', $bad_words), $reply_poster))
$spam = true;
if (!$spam){
if(!$rMySQLQuery = mysql_query("INSERT INTO replys (topic_id,reply_poster,reply_date,reply_message)
VALUES('".$_GET['topic_id']."','".$_SESSION['gebruiker']."',NOW(),'".addslashes($_POST['reply_message'])."');"))
{
message_die();
}
if(!$rMySQLQuery = mysql_query("SELECT member_posts,member_username FROM members WHERE member_username = '".$_SESSION['gebruiker']."'"))
{
message_die();
}
$aFetch = mysql_fetch_assoc($rMySQLQuery);
$aFetch['member_posts'] = (int) $aFetch['member_posts'] + 1;
if(!$rMySQLQuery = mysql_query("UPDATE members SET member_posts = '".$aFetch['member_posts']."' WHERE member_username = '".$_SESSION['gebruiker']."'"))
{
message_die();
}
print '<script language="javascript"> location="view_topic.php?style='.$_GET['style'].'&forum_id='.$_GET['forum_id'].'&topic_id='.$_GET['topic_id'].'"; </script>';
}
}
else
{
?>
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$spam = false;
$bad_words = array('teen', 'viagra', 'order'); //etc...
if (eregi(implode('|', $bad_words), $reply_poster))
$spam = true;
if (!$spam){
if(!$rMySQLQuery = mysql_query("INSERT INTO replys (topic_id,reply_poster,reply_date,reply_message)
VALUES('".$_GET['topic_id']."','".$_SESSION['gebruiker']."',NOW(),'".addslashes($_POST['reply_message'])."');"))
{
message_die();
}
if(!$rMySQLQuery = mysql_query("SELECT member_posts,member_username FROM members WHERE member_username = '".$_SESSION['gebruiker']."'"))
{
message_die();
}
$aFetch = mysql_fetch_assoc($rMySQLQuery);
$aFetch['member_posts'] = (int) $aFetch['member_posts'] + 1;
if(!$rMySQLQuery = mysql_query("UPDATE members SET member_posts = '".$aFetch['member_posts']."' WHERE member_username = '".$_SESSION['gebruiker']."'"))
{
message_die();
}
print '<script language="javascript"> location="view_topic.php?style='.$_GET['style'].'&forum_id='.$_GET['forum_id'].'&topic_id='.$_GET['topic_id'].'"; </script>';
}
}
else
{
?>
Om te reageren heb je een account nodig en je moet ingelogd zijn.
- Details
Door:
Timonb- 6 jaar geleden
- 1.685 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP scripts opties
- PHP algemeen
- Nieuwste PHP scripts
- PHP script toevoegen


PHP hulp
0 seconden vanaf nu