Toon posts:

Anti gastenboek spam methode... Waarom werkt het niet?

Pagina: 1
Acties:
  • 1.429 views sinds 30-01-2008

Verwijderd

Topicstarter
Spam... E-mail, sms, blogs, fora, gastenboeken en straks over ip telefonie... Niet veel aan te doen, maar ik blijf het proberen.

Dus ja, ik heb een zelf geschreven gastenboek en er word daar sinds kort in gespammed.

Nu heb ik talloze methoden bedacht om dat spam tegen te gaan, zonder dat de gebruiker daar "last" van krijgt (plaatjes overtikken bijvoorbeeld). Mijn huidige methode is als volgt:

Elke dag berekent het gastenboek (asp.net) 2 globale random integers (intRandom1 en intRandom2)

In javascript heb ik de volgende code:
code:
1
2
3
4
5
6
<script type="text/javascript" language="javascript">
var int1 = <% = intRandom1 %>;
var int2 = <% = intRandom2 %>;

var strSubmit = '<input type="submit" name="btnSubmit' + (int1 + int2) + '" value="Verzend">';
</script>

Dan, verder in de asp.net code:
code:
1
2
3
If Request.Form("btnSubmit" & intRandom1 + intRandom2) <>"" Then
  'Proces de code
End If
Het werkt dus als volgt:

De submit button wordt door javascript gegenereerd, en heeft om de dag een andere naam. Om die naam te weten, moet de spammer dus mijn code analyseren, want het is haast ondoenelijk om een script te schrijven wat de integers opspoort, en vervolges de berekening maakt. En aangezien de submit button naam required is, is er no way dat er gepost kan worden tenzij de juiste naam van de button wordt meegestuurd.

Het (lijkt) mij een vrij goed idee. Maar toch wordt ik nog steeds gespammed. Zie ik wat over het hoofd, of zijn er misschien menselijke spammers aan het werk?

Btw, andere suggesties zijn misschien de volgende:
Het op de een of andere manier onmogelijk maken om via post of get informatie te sturen (ajax achtige technologie)
Gebruik te maken van flash om berekeningen te doen die bijvoorbeeld required fields vult met waarden
Sessies of cookies gebruiken die geinitialiseerd worden zodra het gastenboek wordt ingeladen (de spammer zal deze technieken dan ook moeten ondersteunen)
Gebruik maken van een soort timing (als er vanuit een script wordt gepost, dan is de tijd tussen het inladen van de pagina en de daadwerkelijke post niet minder dan een seconde. Als we er dus vanuit gaan dat een mens minimaal 5 seconden nodig heeft, dan kunnen we spam posts daarmee filteren
En zo kan ik er nog wel wat verzinnen.

Maar goed, is het waarschijnlijk dat er ook menselijke spammers actief zijn, of is er een andere reden waarom mijn bovenste script niet werkt?
Zijn mijn andere suggesties om spam te blokkeren bruikbaar?

[ Voor 15% gewijzigd door Verwijderd op 21-01-2006 03:33 ]


  • Marzman
  • Registratie: December 2001
  • Niet online

Marzman

They'll never get caught.

Ik denk dat het inderdaad ook handmatig gaat. Loonkosten liggen niet zo hoog in de spamlanden;)

Je zou een ander script kunnen maken dat mensen een simpele (eventueel Nederlandstalige) vraag moeten beantwoord.

Bijvoorbeeld:
"Wat zijn de eerste twee letters van het woord fiets?

Iemand uit Nigeria kan die vraag niet beantwoorden, maar elke Nederlander vult in dat veld fi in. Je kunt er dan eventueel in kleine lettertjes bijzetten dat het een maatregel is om spam te voorkomen.

[ Voor 3% gewijzigd door Marzman op 21-01-2006 05:25 ]

☻/ Please consider the environment before printing this signature
/▌
/ \ <-- This is bob. copy and paste him and he will soon take over the world.


Verwijderd

Verwijderd schreef op zaterdag 21 januari 2006 @ 03:31:
Zie ik wat over het hoofd, of zijn er misschien menselijke spammers aan het werk?
De naam van de knop begint altijd met btnSubmit (of bevat het woord, kan ook). En de knop is altijd van het type 'Submit'. Dus zoveel heb je niet gewijzigd.

  • André
  • Registratie: Maart 2002
  • Laatst online: 27-11 10:04

André

Analytics dude

Een geautomatiseerd script/programma zal misschien de hele pagina opvragen en laten renderen waardoor de JS zijn werk heeft gedaan. Koud kunstje om dan via het DOM alle elementen op te sporen en te submitten. De enige goede oplossing is om zo'n plaatje te gebruiken die mensen moeten overtypen.

  • markvt
  • Registratie: Maart 2001
  • Laatst online: 30-11 09:27

markvt

Peppi Cola

gebruik een drop down met kleuren erin al alles rood is dan pas toevoegen aan je gastenboek oid.

van-tilburg.info -=- meka (sega emulator) - Proud MEDION fanclub member - KOPPIG VOLHOUDEN !


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

André schreef op zaterdag 21 januari 2006 @ 09:14:
De enige goede oplossing is om zo'n plaatje te gebruiken die mensen moeten overtypen.
En aangezien dat nogal een lastige term is om op te zoeken noem ik de naam maar even: CAPTCHA. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Bedankt voor de reacties. Maar nee, ik ga geen plaatjes gebruiken (en kan dat zo evt proggen).

Wat betreft
De naam van de knop begint altijd met btnSubmit (of bevat het woord, kan ook). En de knop is altijd van het type 'Submit'. Dus zoveel heb je niet gewijzigd.
Begrijp ik niet helemaal... Het begint iid met btnSubmit, maar heeft wel telkens een andere naam. Bijvoorbeeld btnSubmit14 of btnSubmit456 (random getallen erachter die javascript invult)
Een geautomatiseerd script/programma zal misschien de hele pagina opvragen en laten renderen waardoor de JS zijn werk heeft gedaan. Koud kunstje om dan via het DOM alle elementen op te sporen en te submitten. De enige goede oplossing is om zo'n plaatje te gebruiken die mensen moeten overtypen
Zullen spammer nu werkelijk zo ver gaan? Het is immers een soort veiligheidsrisico, lijkt mij. Misschien kan ik dan ook script schrijven die misbruikt maakt van een veiligheidslek... Daarnaast kost het processorkracht. En een buggy script (for (i=01; i<-1; i++))kan mogelijk ook een server laten crashen

Maar goed, ik ga het nu maar met een timer proberen.
Zijn er minimaal 4 seconden verstreken, dan mag de message gepost worden. Als het goed is zal een script minder dan een seconde met de verwerking van een pagina bezig zijn... Plus het script moet sessies kunnen ondersteunen. Ja, het zijn geen meesterlijke oplossingen, maar ik vind dat "gekloot" ergens wel leuk; andere mensen gaan 's avonds puzzelen ;)

Ik ben trouwens wel benieuwd... Weet iemand of tools voor dit soort spam ergens te downen zijn? Of zullen de spammers allemaal met eigen gebakken proggies werken?

[ Voor 17% gewijzigd door Verwijderd op 21-01-2006 17:02 ]


  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 29-11 20:20
Kun je niet gewoon het IP of het .tld van de hostname bannen?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:07
Ik vind het wel een interessant project. Ik ben het met djnonsens eens dat CAPTCHA's zijn maar een beperkte oplossing zijn (want ze kunnen vaak ook automatisch gekraakt worden) en nogal storend voor menselijke gebruikers. Een spambeveiliging die niet opvalt is inderdaad wenselijk.

Ik had zelf verwacht dat een ad-hoc methode zoals je in de topic start uit de doeken doet wel zou moeten werken; niet omdat het onbreekbaar is (verre van) maar omdat ik zou denken dat spammers vaste tools gebruiken en het niet uit kan om die aan te passen alleen maar om jouw websiteje (NOFI ;)) te spammen. Blijkbaar valt dat dus toch tegen; ik ben ook wel benieuwd hoe spammers dan precies te werk gaan.

Overigens zou je ook spamfilters zoals die er ook al voor e-mail zijn kunnen inzetten. De inhoud van gastenboekspam is namelijk wel vergelijkbaar met die van e-mailspam, hoewel je niet op e-mailheaders kunt matchen (maar wellicht wel op HTTP-headers). Een Bayesian filter o.i.d. zou m.i. wel in staat moeten zijn om spam te herkennen.

Verwijderd

markvt schreef op zaterdag 21 januari 2006 @ 09:17:
gebruik een drop down met kleuren erin al alles rood is dan pas toevoegen aan je gastenboek oid.
Kun je dit uitleggen?

  • rooiekool
  • Registratie: Januari 2003
  • Laatst online: 01-12 15:08
Ik zie het zo voor me: drie dropdowns met verschillende kleuren naast elkaar. Submit is pas goed wanneer alle drie de dropdowns op bijvoorbeeld 'rood' staan. Is volgensmij ook niet wat TS wil, dit systeem heeft weer extra user-input nodig.

zoals al eerder gezegd: spam is vaak in grote lijnen hetzelfde. Zoeken op verdachte woorden, punten toekennen en eventueel als spam markeren. icm tijdvertraging voor posten en eventuele ip-bans kom je een heel eind denk ik

Verwijderd

Topicstarter
Inderdaad, een spammer heeft er geen zin in om een standaard gastenboekje te kraken, hoop ik.
Ik heb zojuist mijn timeout methode geinplementeerd, eens kijken hoelang dat stand gaat houden (de spammer moer erg slim zijn om dit in de gaten te hebben).

Verder vind ik alle methodes waarbij gebruikers eerst pulldowns moeten selecteren, plaatjes over moeten typen of letters in moeten vullen maar vervelende oplossingen (al zullen ze wel werken).

En ja, je kan natuurlijk filteren op ip basis. Maar spammers gebruiken vaak meerdere servers of wisselen nog wel eens. Ik heb natuurlijk geen zin om nog eens een extra tabel met geblokkeerde ip adressen bij te gaan houden, en probeer mijn aantal database queries zo laag mogelijk te houden voor de snelheid (ja, ip's kan je ook buiten een db om filteren, maar een admin is dan wel zo handig).

Wat betreft filteren op woorden; ook dat is database intensiever en daarnaast werkt dat ook maar half. Het is een kwestie van tijd dat gastenboek spammers dezelfde truckjes uit gaan halen als mailspammers (dus vi@gra in plaats van viagra, etc)

Verder maak ik gebruik van Google's rel="nofollow" property, maar spammers schijnt dat niet te interesseren (ze voegen je zowiezo wel toe, je weet maar nooit of iemand toevallig op een link klikt).

De point is dus om het voor de spammers zo moeilijk mogelijk / niet-interessant te maken
Ik had zelf verwacht dat een ad-hoc methode zoals je in de topic start uit de doeken doet wel zou moeten werken; niet omdat het onbreekbaar is (verre van) maar omdat ik zou denken dat spammers vaste tools gebruiken en het niet uit kan om die aan te passen alleen maar om jouw websiteje (NOFI ) te spammen. Blijkbaar valt dat dus toch tegen; ik ben ook wel benieuwd hoe spammers dan precies te werk gaan.
Dat dacht ik dus ook. En aangezien ik al binnen 24 uur na het activeren van mijn methode de eerst spam kreeg, zie ik vermoedelijk wat over het hoofd, of is er sprake van menselijke spammers, of hebben ze inderdaad een dom methode/parser (wat mij vrij sterk lijkt). Daarom ben ik ook geinteresseerd in de methoden en tools van spammers; als ik deze weet dan weet ik hoe ik mij er het beste tegen kan wapenen, immers

[ Voor 35% gewijzigd door Verwijderd op 21-01-2006 18:58 ]


  • kalechinees
  • Registratie: Mei 2005
  • Laatst online: 25-11 19:01
een andere niet-conventionele methode is door geen form te gebruiken maar een querystring
als je hier tevens een timer ophangt heb je een vrij veilige methode.
de onsubmit werkt niet meer dus is het niet echt interessant meer voor bots.

gewoon een textarea welke gekoppeld is aan een div.
Deze wordt gecodeerd aan een postfile doorgegeven via een normale hyperlink.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-11 09:49

Bosmonster

*zucht*

André schreef op zaterdag 21 januari 2006 @ 09:14:
Een geautomatiseerd script/programma zal misschien de hele pagina opvragen en laten renderen waardoor de JS zijn werk heeft gedaan. Koud kunstje om dan via het DOM alle elementen op te sporen en te submitten. De enige goede oplossing is om zo'n plaatje te gebruiken die mensen moeten overtypen.
Wat ook nog wel kan werken is een confirmatie. Dus gewoon even een extra interactie moment. Dat hoeft dus niet eens een formulier te zijn, kan ook een linkje zijn.

[ Voor 8% gewijzigd door Bosmonster op 21-01-2006 19:37 ]


Verwijderd

Topicstarter
Hmmz... Misschien ben ik er nu dan toch achter waarom mijn methode niet werkte (inclusief mijn laatste timer methode).

Ik ging net ff zitten denken hoe het toch in vredesnaam mogelijk is dat ik 'm zelfs niet op IP basis kon blokkeren (het is telkens dezelfde spammer).. Jaja... toen schoot mij wat te binnen... Ik heb namelijk nog ergens een pda versie van het gastenboek online staan |:( Uiteraard zonder alle antispam methodes

Die had ik voor persoonlijk gebruik gemaakt, voor op vakantie enzo... En ik net in mijn stats kijken; verdacht veel entry pages naar die pda versie deze maand...

Hopelijk heb ik het nu dan echt opgelost...

  • kalechinees
  • Registratie: Mei 2005
  • Laatst online: 25-11 19:01
:) das idd de voordeur beveiligen met de achterdeur open :)

ik gebruik in dat soort gevallen altijd toch de oplossing zonder forms :)
gewoon een javascript die de informatie uit de div dmv een querystring naar de volgende pagina stuurt
geen last voor de gebruiker en vrijwel niet te scannen voor bots (manual spammen kan natuurlijk altijd >:) )

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Soultaker schreef op zaterdag 21 januari 2006 @ 17:29:
Ik vind het wel een interessant project. Ik ben het met djnonsens eens dat CAPTCHA's zijn maar een beperkte oplossing zijn (want ze kunnen vaak ook automatisch gekraakt worden)
Ik dacht dat goede CAPTCHA's, zoals commerciele sites ze soms gebruiken, nog steeds onkraakbaar waren?
en nogal storend voor menselijke gebruikers.
Mjah, mensen storen zich aan van alles en nog wat. Ik vind het maar gezeur; een captcha invullen is bepaald geen moeite. Je kan er altijd nog voor kiezen een login aan te vragen.

Wie trösten wir uns, die Mörder aller Mörder?


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 20-11 21:40

Not Pingu

Dumbass ex machina

André schreef op zaterdag 21 januari 2006 @ 09:14:
Een geautomatiseerd script/programma zal misschien de hele pagina opvragen en laten renderen waardoor de JS zijn werk heeft gedaan. Koud kunstje om dan via het DOM alle elementen op te sporen en te submitten. De enige goede oplossing is om zo'n plaatje te gebruiken die mensen moeten overtypen.
Sterker nog, een plugin in firefox zou dat ook helemaal automatisch kunnen en die ziet de pagina ook zoals een gebruiker em zou zien.
Bosmonster schreef op zaterdag 21 januari 2006 @ 19:36:
[...]


Wat ook nog wel kan werken is een confirmatie. Dus gewoon even een extra interactie moment. Dat hoeft dus niet eens een formulier te zijn, kan ook een linkje zijn.
Het gaat hier wel om een gastenboek. Dat is imho een functie van betrekkelijk weinig gewicht. Op registratie voor een forum, webshop, etc willen mensen misschien wel effe wachten en wat moeite doen, maar voor een gastenboek betwijfel ik dat.

[ Voor 34% gewijzigd door Not Pingu op 22-01-2006 13:06 ]

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-11 09:49

Bosmonster

*zucht*

Gunp01nt schreef op zondag 22 januari 2006 @ 13:04:
[...]


Het gaat hier wel om een gastenboek. Dat is imho een functie van betrekkelijk weinig gewicht. Op registratie voor een forum, webshop, etc willen mensen misschien wel effe wachten en wat moeite doen, maar voor een gastenboek betwijfel ik dat.
Yeah, daarom is een confirmatie een prima alternatief. Het is slechts een extra klikje. Geen captcha overtikken, registratieprocedure of weet ik niet wat.

Verwijderd

Topicstarter
Anywayz, het lijkt nu allemaal te werken, dus voorlopig ben ik tevreden :) En inderdaad, voor een gastenboek wil je niet te moeilijk doen als gebruiker. Het is maar een guestbook, maar voor mij en mijn vrienden het kanaal voor onze communicatie ;) En nee, ik wil geen login; iedereen is vrij om te posten.

En net zo goed als mijn huidige javascript oplossing, is ook een confirmatie prima te kraken, zelfde geldt voor een een Get in plaats van een Post, al dan niet met of zonder submit button.

Ik heb trouwens het idee dat spammers vast ook crawlers hebben die automatisch plaatsen opspeuren waar gepost kan worden middels een form. Gewoon alle form fields indexeren en toevoegen aan de spam database. Zo hebben ze mijn site ook gevonden, vermoed ik.

  • DiedX
  • Registratie: December 2000
  • Laatst online: 01-12 15:44
Ik weet wel zeker. Zo heb ik eens een feedback formulier gemaakt, hard-coded naar mijn mailadres.

Krijg ik opeens rare emails binnen, waarbij ze duidelijk probeerden te emailen.

DiedX supports the Roland™, Sound Blaster™ and Ad Lib™ sound cards


  • Marzman
  • Registratie: December 2001
  • Niet online

Marzman

They'll never get caught.

Gunp01nt schreef op zondag 22 januari 2006 @ 13:04:
[...]


Sterker nog, een plugin in firefox zou dat ook helemaal automatisch kunnen en die ziet de pagina ook zoals een gebruiker em zou zien.


[...]


Het gaat hier wel om een gastenboek. Dat is imho een functie van betrekkelijk weinig gewicht. Op registratie voor een forum, webshop, etc willen mensen misschien wel effe wachten en wat moeite doen, maar voor een gastenboek betwijfel ik dat.
Bij mij werkt de vraag "wat zijn de eerste twee letters van het woord fiets?" geweldig. Er komen nog steeds reacties en de dingen die gewijgerd worden zijn ook spam. Dat dropdown menu met een vraag dat je de kleur rood moet selecteren lijkt me ook goed werken.

Een cookie dat dit veld onthoudt en je bent klaar.

☻/ Please consider the environment before printing this signature
/▌
/ \ <-- This is bob. copy and paste him and he will soon take over the world.


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 20-11 21:40

Not Pingu

Dumbass ex machina

Marzman schreef op dinsdag 24 januari 2006 @ 02:29:
[...]

Bij mij werkt de vraag "wat zijn de eerste twee letters van het woord fiets?" geweldig. Er komen nog steeds reacties en de dingen die gewijgerd worden zijn ook spam. Dat dropdown menu met een vraag dat je de kleur rood moet selecteren lijkt me ook goed werken.

Een cookie dat dit veld onthoudt en je bent klaar.
Maar komen er net zoveel reacties als eerst? Heb je een beeld van het aantal bezoeken van het reactieformulier tegenover het aantal daadwerkelijk geplaatste reacties? (dit gaat natuurlijk niet op als je reactieformulier op een gewone contentpagina staat).

Natuurlijk zorgt het toevoegen van een captcha of registratieprocedure niet voor een daling van 100% van het aantal reacties, de vraag is hoeveel mensen het een te hoge drempel vinden. (dat is dus een vraag, geen conclusie).

Je ziet vaak captcha's waarbij de letters zo onduidelijk gemaakt zijn dat ze ook voor een mensenoog moeilijk te zien zijn. IT'ers hebben over het algemeen ogen die getraind zijn op staren naar details op een beeldscherm, maar dat hoeft niet voor niet-IT'ers te gelden.

Certified smart block developer op de agile darkchain stack. PM voor info.


Verwijderd

Topicstarter
Btw mensen, voor mij is dit topic afgerond (mijn code werkt, en ik verwacht niet dat spammers ooit de tijd zullen nemen om het te kraken - inderdaad mede omdat het dat niet waard is voor een simpel guestbookje).

Maar misschien kan ik anderen nog blij maken met de source (alhoewel de meesten zo wel kunnen schrijven vermoed ik)..

Inline code... maar dat mag de pret niet drukken, hoop ik ;)
Ow enne, ik ben niet zo'n nette coder, als het maar werkt zeg ik altijd maar..

code:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<script language="vbscript" runat="server">
Function generateRandomNumber(ByVal blnNext As Boolean)
  Dim intRandom As Int32
  Dim rndGenerator As Random
        
  rndGenerator = New Random()
  intRandom = rndGenerator.Next(0, 100 + 1)
  If blnNext = True Then
    intRandom = rndGenerator.Next(0, 100 + 1)
  End If

  Return intRandom
End Function

Sub generateSpamCache
  Cache("datTimeout") = Date.Now.AddDays(1)
  Cache("intRandom1") = generateRandomNumber(true)
  Cache("intRandom2") = generateRandomNumber(false)
  'Beetje knudde, maar het werkt
End Sub
</script>

<%
'Mogelijke nadelen: Client moet Sessies en Javascript ondersteunen
'Maar dat doet nagenoeg iedereen, toch?

Dim datTimeOut As Date
Dim intRandom1, intRandom2, intRandomSum As Int32
Dim lngCount As Long

If IsNothing(Cache("datTimeout")) Then
  generateSpamCache()
Else
  If Date.Now > Cache("datTimeout") Then
    generateSpamCache()
  End If
End If

If IsNothing(Session("datTimer")) Then
  Session("datTimer") = Date.Now()
End If

intRandom1 = Cache("intRandom1")
intRandom2 = Cache("intRandom2")
intRandomSum = intRandom1 + intRandom2


If Request.Form("btnSubmit" & intRandomSum) <>"" Then
  'Javascript moet de variablen optellen. Een spammer zal een dom methode moeten
  'gebruiken, of met regular expressions de html moeten parsen en vervolgens de som maken
  If NOT(IsNothing(Session("datTimer"))) Then
    'Als er sprake is van een script wat url afloopt dan:
    'Wordt er meestal direct gepost (dus bestaat de sessie niet)
    'Of, als het echt een goede spammer is dan vraagt ie deze pagina eerst op,
    'al moet zijn script dan nog sessie cookies ondersteunen...
    lngCount = DateDiff(DateInterval.second, Session("datTimer"), Date.Now())
    If NOT(lngCount < 3) Then
      'Als het minimaal 2 seconden heeft geduurd tussen laden en posten
      'Proces die data!
    End If
  End If
End If
%>

<html>
<head>
<title></title>
<script>
var int1 = <% = intRandom1 %>;
var int2 = <% = intRandom2 %>;
var strSubmit = '<input type="submit" name="btnSubmit' + (int1 + int2) + '" value="Klik hier je RSI weg" class="btn" style="width:150px" tabindex="4">';
</script>
</head>
<body>
<form>
  <input type="tekstveld" name="tekstveld">
  <script>document.write(strSubmit);</script>
</form>
</body>
</html>

Verwijderd

Zelf heb ik ook last van spam in mijn gastenboek.

Ik denk dat ik met behulp van een timer dit probleem wel verhelp.
Jammergenoeg kan ik alleen nergens een stukje script vinden hiervoor.

Djnonsens, ik zie dat jij nu o.a. een timer functie hebt geimplementeerd, maar ik wil deze los invoeren.
Ik weet niet hoe ik de functie in mijn situatie moet gebruiken.

Dit is de broncode van mijn gastenboekindex:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<head>
<?php
include("head.inc.php");
?>
</head>
<body>
<?php
include("schrijven.php");
include("bekijk.php");
?>
</body>
</html>
Alles verwijst dus naar php-bestanden.
Dit is schrijven.php:
code:
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
42
43
44
<form method="POST" name="gastenboek" form method="POST" action="voegtoe.php">
<input type="hidden" name="x" value="x11x">
<div align="center">
  <center>
  <table border="0" cellpadding="2" width="100%">
    <tr>
      <td width="13%">Naam:</td>
      <td width="85%">
        <input type="text" name="naam" size="30" style="font-family: arial"></td>
    </tr>
    <tr>
      <td width="13%">E-mail:</td>
      <td width="85%">
        <input type="text" name="email" size="45" style="font-family: arial"></td>
    </tr>
    <tr>
      <td width="13%">Website:</td>
      <td width="85%">
        <input type="text" name="website" size="45" value="http://" style="font-family: arial"></td>
    </tr>
       <tr>
      <td width="13%" valign="top">Bericht:</td>
      <td width="85%">

<textarea rows="3" name="bericht" cols="45" class="tekstvak" style="font-family: Arial"></textarea><br>
<?php
if ($UBB=="true") {
UBBinc(bericht);
}
?><?php
if ($smilie=="true") {
smilieinc(bericht);
}
?> 
</td>
    </tr>
    <tr>
      <td width="13%"></td>
      <td width="85%"><input type="submit" value="Verzenden" name="B1" class="knop"> <input type="reset" value="Invoer wissen" name="B2" class="knop"></td>
    </tr>
  </table>
  </center>
</div>
</form>

voegtoe.php:
code:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php 
ob_start(); 

session_start(); 
$verlooptijd = 30; 

if($_SESSION[tijd] + $verlooptijd > time()){ 
$wachten = $_SESSION[tijd] + $verlooptijd - time(); 
echo "<b>U heeft zojuist al een bericht geplaatst. Over ".$wachten." seconden kunt u weer posten.</b><br><br><A href=\"javascript: history.go(-1);\" target=\"_self\"><blockquote>Klik hier om terug te gaan</blockquote></A>"; 
} 
else{ 
$tijd = time(); 
session_register("tijd"); 

$datum=date("d-m-Y @ H:i:s",time());
$id=date("YmdHis",time());

if((isset($_POST['x'])) and($_POST['x']=="x11x")) {

if (strlen($_POST['naam'])<2) {
echo "<b>U heeft geen naam opgegeven...</b><br><br><A href=\"javascript: history.go(-1);\" target=\"_self\"><blockquote>Klik hier om het bericht te wijzigen</blockquote></A>";
}
elseif (strlen($_POST['bericht'])<3) {
echo "<br><br><b><br>U heeft geen bericht ingevoerd...</b></font><br><br><A href=\"javascript: history.go(-1);\" target=\"_self\"><blockquote>Klik hier om het bericht te wijzigen</blockquote></a>";
}
else {

$_POST['naam']  = strip_tags($_POST['naam']);
$_POST['website'] = strip_tags($_POST['website']);
$_POST['email'] = strip_tags($_POST['email']);
$_POST['bericht'] = strip_tags($_POST['bericht']);
$_POST['bericht'] = stripslashes($_POST['bericht']);

$_POST['bericht'] = nl2br($_POST['bericht']); 
$_POST['bericht'] = eregi_replace("\n", "", $_POST['bericht']); 

if(getenv(HTTP_X_FORWARDED_FOR)) { $IPadres = getenv(HTTP_X_FORWARDED_FOR); }
elseif(getenv(HTTP_CLIENT_IP)) { $IPadres = getenv(HTTP_CLIENT_IP); }
else { $IPadres = $REMOTE_ADDR; }
      
$logfile = fopen("$bestand","a"); 
fputs($logfile, $id."||".$datum."||".$_POST['email']."||".$_POST['website']."||".$_POST['bericht']."||".$_POST['naam']."||".$IPadres."||||\n"); 
fclose($logfile); 

if (!$_POST['email']=="") {
$recipient = "$email";
$subject = "Plaatsing bericht The Sphere Gastenboek";
$header = "From: Admin The Sphere\n";
$mail_body = "Beste ".$_POST['naam'].", bedankt voor het plaatsen van een bericht.\n\nThe Sphere\n\n";
mail($recipient, $subject, $mail_body, $header);
}

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta http-equiv="refresh" content="0;URL=<?php echo $bekijkURL; ?>">
<title>Gastenboek</title>
</head>
<body>
</body>
</html>
<?php
} } }
 
ob_end_flush(); 
?>


Kan iemand mij helpen? Ik ben nog niet zo'n held in php programmering.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Ik heb voor mijn weblog net een anti-spam dingetje geklust op basis van Akismet. Misschien kun je daar iets mee? Moet je even een stukje code downloaden uit het development gedeelte van die site (voor PHP 4 of PHP 5) en implementeren in je site. Is niet al te moeilijk, werkt wel redelijk goed (althans in mijn ervaring).

Rustacean


Verwijderd

Manuzhai schreef op dinsdag 29 augustus 2006 @ 15:07:
Ik heb voor mijn weblog net een anti-spam dingetje geklust op basis van Akismet. Misschien kun je daar iets mee? Moet je even een stukje code downloaden uit het development gedeelte van die site (voor PHP 4 of PHP 5) en implementeren in je site. Is niet al te moeilijk, werkt wel redelijk goed (althans in mijn ervaring).
Dankjewel Manuzhai. Ik zal overwegen dat te gebruiken als ik geen interne oplossing kan vinden.

Maar mijn voorkeur ligt natuurlijk bij het implementeren in mijn huidige scripts.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op dinsdag 29 augustus 2006 @ 15:03:
Ik denk dat ik met behulp van een timer dit probleem wel verhelp.
Jammergenoeg kan ik alleen nergens een stukje script vinden hiervoor.

Djnonsens, ik zie dat jij nu o.a. een timer functie hebt geimplementeerd, maar ik wil deze los invoeren.
Ik weet niet hoe ik de functie in mijn situatie moet gebruiken.

Dit is de broncode van mijn gastenboekindex:
**knip veel te veel irrelevante code neergeplempt**
time() geeft een timestamp terug. Zet die in een sessie. Als formulier verwerkt wordt, vergelijk je de huidige time() met die sessiewaarde. Indien verschil kleiner dan x, die('Jammer joh!').
Als je je 5 minuten inleest op sessies (langer hoeft dat echt niet te duren), schrijf je dit binnen luttele seconden in PHP, daar hoef je geen PHP held voor te zijn. :)

{signature}


Verwijderd

CAPTCHA's worden mijns inziens een probleem zodra de gemiddelde bezoeker ze ook niet langer kan ontcijferen. Er voor een of andere registratie ééntje oplossen tot daar aan toe, maar als je door alle lijntjes en vervormingen geen letters meer ziet, is het wel bijzonder vervelend als je keer op keer opnieuw mag proberen.

Ik heb nu een testje lopen waarbij ik de levenshtein-afstand van de ingevoerde string tot de juiste code bereken, zodat je een bepaald percentage fouten mag maken. De kans dat een bot alsnog de juiste code gokt wordt zo wat groter, maar blijft bijzonder klein. Ik schrap sowieso altijd disambigue letters als 0 en o.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 29 augustus 2006 @ 15:20:
Maar mijn voorkeur ligt natuurlijk bij het implementeren in mijn huidige scripts.
En die oplossing mogen wij nu even in je code gaan klussen? Dat is hier niet de bedoeling. We willen je best helpen om tot een oplossing te komen, maar we willen wel graag wat inzet van jouw kant zien. Wat heb je al geprobeerd?

@Kagaherk: er zijn meer methoden voor CAPTCHA dan alleen images, methoden die 0,0 aan gebruikersinteractie vergen. Als je even zoekt op "gastenboek spam" in dit subforum, dan vind je waarschijnlijk meer dan genoeg, zeker als je alleen topics uit 2006 bekijkt. Ik weet namelijk zeker dat dat een tijd geleden besproken is in een topic, waar crisp er uitgebreid op inging. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Ik heb al tijden een simpel stukje javascript dat bij een onclick een hidden veld invult met een waarde, waarop door de php gecontroleerd kan worden. Verder heb ik ook een block erop staan als de referrer van de gastenboek niet van de bijbehorende website afkomt. En ik heb een noindex in de meta robots tag staan, zodat searchengines mijn gastenboek niet indexeren en de spammers het niet via de search kunnen vinden. Tot slot heb ik in de webserverconfiguratie een blok staan op de referrer ^http://www.google.com$ (dus zonder de normale searchquery). Uit de logs van de afgelopen ~3 jaar en bijna 1 miljoen views ben ik tot de conclusie gekomen dat alléén de searchbots van de spammers deze als referrer gebruiken.

As far werkt het allemaal uitstekend :Y)

Verwijderd

ja probleem had ik ook op mijn GB. Heb nu zo gedaan, dat je 9 plaatjes hebt, waarvan 3 mijn kop op staat (random). En je moet de plaatjes aanvinken waar mijn kop op staat, anders no go ;-) .... heb nu weer rust op mijn mail. Check

http://www.leihitu.nl .... op de frontpage

  • Glabbeek
  • Registratie: Februari 2001
  • Laatst online: 27-11 14:24

Glabbeek

Dat dus.

Verwijderd schreef op woensdag 30 augustus 2006 @ 10:27:
ja probleem had ik ook op mijn GB. Heb nu zo gedaan, dat je 9 plaatjes hebt, waarvan 3 mijn kop op staat (random). En je moet de plaatjes aanvinken waar mijn kop op staat, anders no go ;-) .... heb nu weer rust op mijn mail. Check

http://www.leihitu.nl .... op de frontpage
Maar dan moet de bezoeker wel weten hoe jij er uit ziet, dus vaak is dat geen oplossing lijkt me.

En zo is het maar net.


Verwijderd

Glabbeek schreef op woensdag 30 augustus 2006 @ 12:06:
[...]


Maar dan moet de bezoeker wel weten hoe jij er uit ziet, dus vaak is dat geen oplossing lijkt me.
meer reden om mijn site door heen te lopen hahahahaha

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 17:16
Heb enige tijd geleden ook last gehad van spammers en ik heb aan mijn form twee hidden velden toegevoegd, waarvan ik de ene een random waarde geef en de andere het resultaat van een bepaalde berekening op deze waarde. Pas als de waardes overeenkomen posten, zo niet: OPZOUTEN!

Ik gebruik zelf als berekening een md5 hashing met een sleutelwoordje erbij. Tot nu toe geen last gehad van spammers.

Read the code, write the code, be the code!


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Verwijderd schreef op zaterdag 21 januari 2006 @ 03:31:
want het is haast ondoenelijk om een script te schrijven wat de integers opspoort, en vervolges de berekening maakt.
Appeltje eitje.
Geef me het adres voor die pagina, en ik zal een scriptje maken dat de naam van de button geeft.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


Verwijderd

Voutloos schreef op dinsdag 29 augustus 2006 @ 15:26:
[...]
time() geeft een timestamp terug. Zet die in een sessie. Als formulier verwerkt wordt, vergelijk je de huidige time() met die sessiewaarde. Indien verschil kleiner dan x, die('Jammer joh!').
Als je je 5 minuten inleest op sessies (langer hoeft dat echt niet te duren), schrijf je dit binnen luttele seconden in PHP, daar hoef je geen PHP held voor te zijn. :)
Heeft iemand misschien een linkje naar een goede manual hierover?
Ik weet namelijk niet hoe ik dit moet invoeren. Hoe maak je zo'n vergelijking?

Verwijderd

iemand??, nee?

Misschien iemand die het me persoonlijk wil uitleggen?,ook niet??

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 30-11 19:23
Een standaard vergelijking maken is toch niet zo moeilijk? De resultaten van time() zijn integers. Vergelijk deze. Hoe sessies werken zal ook wel duidelijk zijn.
En anders http://php.net/session

Bezoek eens een willekeurige pagina


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Het heeft iig geen zin om een oud topic op deze manier omhoog te schoppen. Ook de manier van je 2de reactie zal niet echt veel mensen motiveren om te antwoorden.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.