Guestbook Spam Protected (MySQL DB)

Door Wouter De Schuyter, 15 jaar geleden, 16.772x bekeken

Zeer simpel PHP gastenboek met MySQL DB door mij gemaakt. Sommige dingen zoals de functie van de emoticons zijn wat onhandig gedaan en zitten wat overbodige dingen in maar had geen zin om ze er uit te halen wat ook niet nodig is het heeft geen invloed op het script.

Je kan comments toevoegen en bekijken, het heeft een captcha als beveiliging tegen spam. Het heeft ook de optie om je email te verbergen en om smileys te activeren of deactiveren, dus dat ":)"/":p"/":d" etc vervangen wordt door een smiley. De basis van UBB zit er ook in (I/B/U/CENTER). Het zet ook het ip van de poster in de DB, dit kan je eventueel nog gebruiken om als je het script wilt uitbreiden.

Voorbeeld Zonder Opmaak: http://projects.paradox-productions.net/GUESTBOOK/not-styled/guestbook.php
Voorbeld Met Opmaak: http://projects.paradox-productions.net/GUESTBOOK/styled/guestbook.php

Download: http://downloads.paradox-productions.net/?f=GUESTBOOK.rar
-
Emoticons Alleen: http://downloads.paradox-productions.net/?f=emoticonsGuestbook.rar
Fonts Alleen: http://downloads.paradox-productions.net/?f=fonts.rar

Voorbeeld: http://Zie toelichting

Gesponsorde koppelingen

PHP script bestanden

  1. guestbook-spam-protected-mysql-db

 

Er zijn 28 reacties op 'Guestbook spam protected mysql db'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Vdleije .
vdleije .
15 jaar geleden
 
0 +1 -0 -1
Ziet er goed en professioneel uit!

Het design vind ik echt té mooi.
Hans
hans
15 jaar geleden
 
0 +1 -0 -1
je bent gwn een proscripter:)
Richard van Velzen
Richard van Velzen
15 jaar geleden
 
0 +1 -0 -1
Professioneel? Waarom zit er zulke brakke bb-omzetting in? Waarom wordt empty() gebruikt? Ik kan nog wel even doorgaan...
Vdleije .
vdleije .
15 jaar geleden
 
0 +1 -0 -1
Licht is toe waarom je geen empty mag gebruiken?
Richard van Velzen
Richard van Velzen
15 jaar geleden
 
0 +1 -0 -1
Stel, ik vul '0' in in een veld? Ja, er zijn zat toepassingen waar je dat wil, even voor de duidelijkheid. empty() beschouwt een string met '0' erin ook als leeg. Daarom controleer je dus altijd met $string <> '' of het leeg is. Niet anders, want dat is iets heel anders.

En ga daar dan alsjeblieft niet tegenin met het feit dat in dit script alle velden toch al langer moeten zijn dan 1 teken, want het is een slechte gewoonte. Eentje die je gewoon niet moet blijven volhouden, want het kan je je kop kosten. Net als alle fouten. ;)
Nicoow Unknown
Nicoow Unknown
15 jaar geleden
 
0 +1 -0 -1
En wat dacht je dan van isset()?
Volgens mij nog net even beter.

Overigens is $_SERVER['PHP_SELF'] ook niet geheel veilig, dit blijkt vrij makkelijk aan te passen te zijn, gewoon de bestandsnaam is over het algemeen beter.
Voor de rest dood zonde dat je ubb parser waarrdeloos is,
je kan mischein beter een array gebruiken waarmee je dan ongeveer z'n array krijg:
array(:P => tong, :D => blij)
enzovoorts, zou al een stuk effectiefer wezen
Richard van Velzen
Richard van Velzen
15 jaar geleden
 
0 +1 -0 -1
Isset() behoor je sowieso over alle user input te halen, aangezien je _nooit_ weet of iets daadwerkelijk is meegestuurd. Daarna doe je de betreffende checks, of een string niet leeg is, of een email klopt, of z'n IP opgeteld een priemgetal is, enzovoorts.
Nicoow Unknown
Nicoow Unknown
15 jaar geleden
 
0 +1 -0 -1
overigens is time een gereserveerde naam in mysql, deze hoor je dus niet te gebruiken.
Klaasjan Boven
Klaasjan Boven
15 jaar geleden
 
0 +1 -0 -1
@Richard van Velzen.Ik vind dat je enigzins overtrokken reageert. Ik geef dat hier een daar wat dingen zijn die veiliger mogen (mysql_real_escape_string) en dat soort dingen. Tevens zijn er ongetwijfeld zaken die handiger kunnen maar dit script is een mooie basis voor een leuk gastenboek. Ze staan hier in de scribtlib 100 malen slechter

@Paradox. Fix de genoemde dingen even dan is het een prachtig stukje werk
Robert Deiman
Robert Deiman
15 jaar geleden
 
0 +1 -0 -1
@Richard
Empty haalt geld ook gelijk als isset(). Je controleert dus bij de variabelen meteen of er wel wat is ingevuld en of ze wel zijn ingesteld. Er zijn mogelijkheden waarbij je inderdaad ook een 0 in wil mogen vullen, maar dat is hier dus duidelijk niet het geval.
In dit geval is empty wel een goede oplossingen ook niet de enige die je zou gebruiken, maar niet de enige. (strlen() is bijvoorbeeld ook wel handig en een preg_match bijvoorbeeld ook voor controle)

Juist omdat empty controleert of de variabele wel bestaat en of er (behalve de 0) wel een inhoud aan zit is dat een heel handige functie.


@Paradox
Wat je eigenlijk nog wel moet doen en jezelf ook aanleren is consequent zijn in de gebruikte dingen. De enge keer gebruik je een boolean (true/false) om te kijken of iets goed/ fout is (bijv of de strings lang genoeg zijn) en later (voor de emoticons) alleen een 0 of een 1.. Probeer je aan te leren voor hetzelfde type dingen ook hetzelfde te gebruiken, dat maakt het voor zowel jezelf als iemand anders gemakkelijker om je script te gebruiken/ aan te passen.
PHP erik
PHP erik
15 jaar geleden
 
0 +1 -0 -1
varchar(512)? levert dat niet een dikke error op?
Wouter De Schuyter
Wouter De Schuyter
15 jaar geleden
 
0 +1 -0 -1
@PHPerik:
Neen.
Hoezo? Leg eens uit a.u.b.
Mitchelp
Mitchelp
15 jaar geleden
 
0 +1 -0 -1
Mooi gescript alleen 1 (grote) fout(je).

Kijk het gastenboek nu maar is! Alleen maar even <noscript> erin toegevoegt en zie de fout..

Lijkt me toch niet egt de bedoeling wel dan??
Wouter De Schuyter
Wouter De Schuyter
15 jaar geleden
 
0 +1 -0 -1
@Mitchelp:

Bedankt voor het even te melden :).
Heb nu het script aangepast, dit weekend hou ik me wel eens bezig met het script hier op phphulp helemaal aan te passen zoals het voorbeeld online en de rars even opnieuw maken en eventueel de andere bugjes ook even doen :).
Mitchelp
Mitchelp
15 jaar geleden
 
0 +1 -0 -1
Toppie :P

EDIT:

Nog steeds niet goed genoeg beveiligt.
Kijk je gastenboek nog maar een keer:
dit heb ik erin gegooit:
<noscript />
Mitchelp
Mitchelp
15 jaar geleden
 
0 +1 -0 -1
Heb je het inmiddels gefixt??
even wat dingen grobeert maar het meest werkt niet meer.
Alleen <noscript /> niet getest omdat ik denk dat je die nog niet helemaal beveiligt hebt.
Barman V
Barman V
15 jaar geleden
 
0 +1 -0 -1
Leuk scriptje, maaaaaaaarrrr:

- Vervelend formulier (wat zijn de vereiste velden?, onduidelijke tekens in overtypplaatje (is het 0 of O, is het kleine of grote letter?)
- Er zit geen max op in de textarea. Dus je kan enorme teksten invullen. Nooit goed voor de db.
- Gebruik stripslashes, ook in de textarea. Als ik een quot invoer, maar krijg dan een melding dat ik iets vergeten ben, dan zie ik er slashes voor staan.
Mitchelp
Mitchelp
15 jaar geleden
 
0 +1 -0 -1
Beveiliging valt me nog steeds tegen ik ben er weer in geslaagd het gastenboek te laten crashen.
Laat de berichten die gepost worden naar de database door:
htmlspecialchars(); gaan als ik het goed heb haalt zorgt dat ervoor dat je geen <noscript /> in welke manier meer kan posten..


15 jaar geleden
 
0 +1 -0 -1
Fout Mitchelp!

htmlentities() doe je bij de output. Bij de input van data doe je mysql_real_escape_string().
Ger
Ger
15 jaar geleden
 
0 +1 -0 -1
Heb hem ook geprobeerd maar wil niet werken op php5,jammer.
En om nu terug te gaan naar php4 is me net iets teveel van het goede.
Ziet er wel erg mooi uit.
Wouter De Schuyter
Wouter De Schuyter
15 jaar geleden
 
0 +1 -0 -1
@ Ger, zie php versie van de server waar het op draait: http://paradox-productions.net/phpinfo.php 5.2.6
Ger
Ger
15 jaar geleden
 
0 +1 -0 -1
@ Paradox,Hmm,ga toch weer eens verder kijken als mijn neus lang is.ben nog niet zo lang met Php bezig.
Als het maar niet,weer, aan mijn windhoos server ligt.
Draai Php v 5.2.3

Local even een test gedaan.
Krijg deze errors:
............................
............................

OPGELOST!!!!
Errors die ik had geplaatst heb ik verwijderd.

Regel die ik er bij heb gezet --> error_reporting(E_ALL ^ E_NOTICE);
Marjolein
Marjolein
15 jaar geleden
 
0 +1 -0 -1
Inmiddels heb ik 't gastenboek zover dat 't op m'n site staat, heb ik de boel een beetje aangepast aan m'n wensen en heb ik zelfs de connectie met m'n database voor elkaar gekregen, alleen één stom ding wil me niet lukken: de captcha laten werken. In vakje waar eigenlijk de code hoort te staat, staat nu een kruisje met 'Are You Human'. Ik gebruik gewoon het script dat hierboven staat, aan de captcha heb ik niets veranderd. Kan iemand me helpen om die code alsnog zichtbaar te krijgen?
Wouter De Schuyter
Wouter De Schuyter
15 jaar geleden
 
0 +1 -0 -1
De link naar de captcha klopt niet, geef eens je de link waar het online staat dan kan ik misschien helpen.
Marjolein
Marjolein
15 jaar geleden
 
0 +1 -0 -1
Ah, vandaar. Hij staat onder testt-tuin.woelmuis.nl/guestbook.php. Ik heb inmiddels een beetje zitten stoeien met 't script (de captcha nog een keer ingevoerd volgens het usage.txt bestandje dat in de download zat), maar verder niks veranderd ofzo. Bedankt!
Wouter De Schuyter
Wouter De Schuyter
15 jaar geleden
 
0 +1 -0 -1
Fatal error: Call to undefined function imagettftext() in /www/woelmuis.nl/t/e/s/testt-tuin/htdocs/Captcha/captcha.php on line 49

-

Ziet er naar uit dat je host geen gd library heeft of die functie kan in ieder geval niet worden aangeroepen.
Marjolein
Marjolein
15 jaar geleden
 
0 +1 -0 -1
Aaah, is dat 't probleem. Altijd gezellig, gratis webhosting :S Dan laat ik 't nu gewoon even voor wat 't is en ga ik verder stoeien als de site naar z'n officiële host gaat! Tnx iig :-)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Marjolein
Marjolein
15 jaar geleden
 
0 +1 -0 -1
Goed, inmiddels staat het gastenboek online op http://www.det-tuin.nl/guestbook.php?action=addComment en heb ik nu wel de verificatiecode in beeld, maar ik krijg consequent de reactie dat ik de verkeerde code ingetikt heb. Enig idee wat ik hier aan kan doen?

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. guestbook-spam-protected-mysql-db

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.