spam filteren
Met een zogenaamd tweede bericht en of email, zoals op deze manier bijvoorbeeld.
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
39
40
41
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
39
40
41
<html>
<head>
<title></title>
<style type="text/css">
.hidden {
display: none;
}
</style>
</head>
<body>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST)) {
$aFouten = array();
if($_POST['bericht'] == '')
{
$aFouten[] = 'Je hebt geen bericht ingevuld';
}
else
{
$bericht = $_POST["bericht"];
if (preg_match('/<a[\s]+[^>]*?href[\s]?=[\s\""\']+(.*?)[\""\']+.*?>([^<]+|.*?)?<\/a>/', $bericht))
{
$aFouten[] = 'Sorry!!! Maar in je bericht staan een of meerdere linken, Dus spam'; header("Refresh: 10");
}
}
if($_POST['bericht_2'] == '')
{
$aFouten[] = 'Je hebt geen bericht ingevuld'; header("Refresh: 1"); exit;
}
else
{
$ = $_POST["bericht_2"];
if (preg_match('/[[0-9a-zA-Z]/', $bericht_2))
{
$aFouten[] = 'Sorry!!!'; header("Refresh: 1"); exit;
}
}
?>
<head>
<title></title>
<style type="text/css">
.hidden {
display: none;
}
</style>
</head>
<body>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST)) {
$aFouten = array();
if($_POST['bericht'] == '')
{
$aFouten[] = 'Je hebt geen bericht ingevuld';
}
else
{
$bericht = $_POST["bericht"];
if (preg_match('/<a[\s]+[^>]*?href[\s]?=[\s\""\']+(.*?)[\""\']+.*?>([^<]+|.*?)?<\/a>/', $bericht))
{
$aFouten[] = 'Sorry!!! Maar in je bericht staan een of meerdere linken, Dus spam'; header("Refresh: 10");
}
}
if($_POST['bericht_2'] == '')
{
$aFouten[] = 'Je hebt geen bericht ingevuld'; header("Refresh: 1"); exit;
}
else
{
$ = $_POST["bericht_2"];
if (preg_match('/[[0-9a-zA-Z]/', $bericht_2))
{
$aFouten[] = 'Sorry!!!'; header("Refresh: 1"); exit;
}
}
?>
<table width="700px" border="1" cellspacing="2" cellpadding="2">
<form name="form" method="post" action="">
<tr>
<td align="left" width="120px">Naam<b> :</b></td><td align="left" width="300">
<input type="text" size="34" maxlength="40" id="naamInput" name="naam" placeholder="Je naam"></td>
</tr>
<tr>
<td align="left">E_mailadres<b> :</b></td><td align="left">
<input type="text" size="34" maxlength="40" id="emailInput" name="email" placeholder="Je email adres"></td>
</tr>
<tr>
<td align="left" valign="top">Bericht<b> :</b></td><td align="left">
<textarea rows="10" cols="57" id="berichtTextarea" name="bericht" placeholder="Your message"></textarea></td>
</tr>
<tr>
<tr>
<td class="hidden">
<textarea rows="10" cols="57" id="bericht2Textarea" name="bericht" placeholder="Your message"></textarea></td>
</tr>
<tr>
<td align="left"></td><td align="left">
<input type="submit" name="submit" value="Posten">
<input type="reset" name="Reset" value="Resetten"></td>
</tr>
</form>
</table>
</body>
</html>
Gewijzigd op 29/04/2014 04:31:36 door Niek Kasius
Verder moet je de AuotComplete utischakelen, anders vullen eerlijke gebruikers zo'n veld onbedoeld ook in.
Ward, kun je uitleggen wat je bedoelt?
Als je bijvoorbeeld een input name="email" hebt, kan de AutoComplete van een browser daarin automatisch een eerder ingevuld e-mailadres invullen. Dat wil je niet als dit een verborgen veld is voor spambots.
Ah zo, ik snap 'm :)
voor adresbalk hoeft dat niet Toch?
En ik klik altijd voordat ik de pc uit zet op Browsergeschiedenis verwijderen.
Je moet ervan uitgaan dat andere gebruikers wel een AutoComplete actief hebben. Die mag dus niet per ongeluk een veld vullen dat je hebt verborgen om spambots om de tuin te leiden.
dat ziet toch alleen een bot maar
Gewijzigd op 29/04/2014 13:14:03 door Niek Kasius
Het punt is dat spambots in de HTML-code een veld zien en dat invullen. Gewone gebruikers zien hetzelfde veld niet (omdat je het verbergt met CSS of JavaScript) en kunnen het dus niet invullen.
Zo maak je een onderscheid tussen spambots en echte gebruikers.
Een eventuele AutoComplete van een browser mag dat veld dus ook niet automatisch invullen, anders behandel je echte gebruikers als spambots.
Quote:
Een eventuele AutoComplete van een browser mag dat veld dus ook niet automatisch invullen, anders behandel je echte gebruikers als spambots.
Ja dat snap ik nog wel, Maar de AutoComplete van je bezoekers kun je niet uit schakelen neem ik aan, en daarbij de bezoeker ziet dat veld niet, dus kan die niks invullen en werkt die autocoplete ook niet, want die vult alleen maar aan als er iets word ingevuld.
Of zie ik dat verkeerd
Captcha om spam tegen te gaan?
Waarom niet iets als <input type="hidden" autocomplete="off" />
Met een een hidden input een spambot 'vangen' noem je trouwens een honeypot. Als je er meer over wilt weten kun je daarop zoeken.
> ik heb dat al uit staan voor Formulieren en voor Gebruikersnamen en wachtwoorden op formulieren.
> voor adresbalk hoeft dat niet Toch?
> En ik klik altijd voordat ik de pc uit zet op Browsergeschiedenis verwijderen.
Wat jij doet hoeft een ander niet te doen ;)
Quote:
Waarom niet iets als Captcha om spam tegen te gaan?
Chris NVT
Omdat ik daar moeite mee heb als ik ergens op een site een captcha moet invullen moet vaak wel 5 tot 10 keer Refreshen om er iets leesbaars uit te halen.
Ward van der Put of
Michael -
En wat is het nu?
of
hiddenForBadBots zien die bots dat dan niet? En als ze dat wel zien nodigt je ze dat niet uit om het niet in tevullen.
Toevoeging op 29/04/2014 18:02:25:
Quote:
Waarom niet iets als Captcha om spam tegen te gaan?
Chris NVT
Omdat ik daar moeite mee heb als ik ergens op een site een captcha moet invullen moet vaak wel 5 tot 10 keer Refreshen om er iets leesbaars uit te halen.
Ward van der Put of
Michaet-
En wat is het nu?
of
En nog iets class=hiddenForBadBots zien die bots dat dan niet? En als ze dat wel zien nodigt je ze dat niet uit om het dan juist niet in te vullen.
Gewijzigd op 29/04/2014 18:06:24 door Niek Kasius
Schrijf dan zelf een Captcha met max 3 leesbare cijfers/letters, dit werk prettig en makkelijk.
>> En nog iets class=hiddenForBadBots zien die bots dat dan niet? En als ze dat wel zien nodigt je ze dat niet uit om het dan juist niet in te vullen.
Dit is een klasse die je in CSS kunt verbergen. In je eigen eerste voorbeeld heb je die "hidden" genoemd.
>>Dit is een klasse die je in CSS kunt verbergen. In je eigen eerste voorbeeld heb je die "hidden" genoemd.
Dat snap ik!
Maar als een bot Email Adressen kan uitlezen, En die verborgen input dan kan die "class=hiddenForBadBots" toch ook lezen neem ik aan.
Vandaar die vraag.
En nog iets
Ik kom soms wel eens een site tegen waar ik dan in de bron wil kijken met Bron weergeven maar kom ik daar dan niet in, Dus zal daar een of andere beveiliging op zitten denk ik.
kan dat ook SpamBots tegen houden?
Gewijzigd op 30/04/2014 16:08:30 door Niek Kasius
Broncode van een webpagina weergeven kan altijd: je hebt die broncode immers ontvangen. Met JavaScript is rechtsklikken op een webpagina te blokkeren, maar dat is heel simpel te omzeilen.
Php kan niet uitgelezen worden hoor, blijft toch altijd server side. Kwestie van aantal afbeeldingen met gegenereerde namen maken en daar het resultaat encrypted aan vergelijken. Zo heb ik het laatst ook gemaakt voor een klant.
Wordt door PHP gekeken tijdens het verzenden van het formulier.
@Niek
Wat ook een leuke optie is, maak een Checkbox met de omschrijving "Bent u echt een persoon?" en check of deze box geset is. Bots gaan niet zomaar overal checkboxen checken, dus dat wellicht een snelle (niet water dichte) oplossing zijn.
ik heb filter dus met preg_match.
Maar dat is schijnbaar niet genoeg zoals ik dat heb.
Want als ik nu bijvoorbeeld <a href="http://www.viagra.com">viagra potentie pillen, en nog meer text en of linken invoer zonder </a> er achter, plaats die het bericht wel, en alleen als er <a/> achter staat geeft die aan dat er een of meerderen linken in het bericht staan en stopt die de invoer.
Code (php)
1
2
3
2
3
<?php
if (preg_match('/<a[\s]+[^>]*?href[\s]?=[\s\""\']+(.*?)[\""\']+.*?>([^<]+|.*?)?<\/a>/', $bericht))
?>
if (preg_match('/<a[\s]+[^>]*?href[\s]?=[\s\""\']+(.*?)[\""\']+.*?>([^<]+|.*?)?<\/a>/', $bericht))
?>
En met de email doet die ook raar, want als ik [email protected] invoer geeft die geen fout, en plaatst dat gewoon, maar @123.com maar dat is toch geen host of server naam of hoe dat heet.
Ik had <a href="http://phpwiki.santhe.nl/index.php?title=Check_het_emailadres_op_juistheid">Deze</a>ook al geprobeerd maar die is veel langer maar doet precies het zelfde had ik gemerkt.
kan ik daar nog iets aan veranderen
Code (php)
1
2
3
2
3
<?php
if(!preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $email))
?>
if(!preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $email))
?>
Gewijzigd op 04/05/2014 05:04:02 door Niek Kasius
Niek Kasius op 04/05/2014 05:02:25:
En met de email doet die ook raar, want als ik [email protected] invoer geeft die geen fout, en plaatst dat gewoon, maar @123.com maar dat is toch geen host of server naam of hoe dat heet.
Met de functie getmxrr() kun je controleren of er voor een hostnaam (zoals 123.com) MX-records worden gevonden voor mail exchange (MX). Retourneert deze functie true, dan is de hostnaam in het e-mailadres geschikt voor mail.
Retourneert getmxrr() false, dan kun je aansluitend met gethostbyname() nog controleren of de hostnaam überhaupt wel bestaat.