Spamfilter för gästböcker osv. 1.0

Permalänk
Medlem

Spamfilter för gästböcker osv. 1.0

Jag tror jag har lyckats göra en ganska bra funktion som förebygger spam istället för att använda sig av en ful captcha. Men jag skulle behöva hjälp/kritik på hur jag skulle kunna göra den bättre.

exempel på struktur:

<?php function agent($browser) { $useragent = $_SERVER['HTTP_USER_AGENT']; return strstr($useragent, $browser); } function os($opersys) { $oper = $_SERVER['HTTP_USER_AGENT']; return strstr($oper, $opersys); } if(agent('Firefox') != FALSE) { $browser = "<i>Firefox browser</i> \n"; if(os('Windows') != FALSE) { $os = "<i>Windows</i> \n"; } elseif(os('Linux') != FALSE) { $os = "<i>Linux</i> \n"; } elseif(os('MAC') != FALSE) { $os = "<i>MAC OSX</i> \n"; } else { $os = ""; } } else if(agent('America Online Browser') != FALSE) { $browser = "<i>AOL browser</i> \n"; $staus .= "<i>Windows</i> \n"; } else if(agent('Opera') != FALSE) { $browser = "<i>Opera browser</i> \n"; if(os('Windows') != FALSE) { $os = "<i>Windows</i> \n"; } elseif(os('Linux') != FALSE) { $os = "<i>Linux</i> \n"; } elseif(os('MAC') != FALSE) { $os = "<i>MAC OSX</i> \n"; } else { $os = ""; } } else if(agent('Safari') != FALSE) { $browser = "<i>Safari browser</i> \n"; if(os('Windows') != FALSE) { $os = "<i>Windows</i> \n"; } elseif(os('Linux') != FALSE) { $os = "<i>Linux</i> \n"; } elseif(os('MAC') != FALSE) { $os = "<i>MAC OSX</i> \n"; } else { $os = ""; } } else if(agent('MSIE') != FALSE) { $browser = "<i>Internet Explorer</i> \n"; if(os('Windows') != FALSE) { $os = "<i>Windows</i> \n"; } elseif(os('Linux') != FALSE) { $os = "<i>Linux</i> \n"; } elseif(os('MAC') != FALSE) { $os = "<i>MAC OSX</i> \n"; } else { $os = ""; } } else { $os = "User Agent not recognised. \n"; if(os('Windows') != FALSE) { $os = "<i>Windows</i> \n"; } elseif(os('Linux') != FALSE) { $os = "<i>Linux</i> \n"; } elseif(os('MAC') != FALSE) { $os = "<i>MAC OSX</i> \n"; } else { $os = "N/A"; } } $referer = $_SERVER['HTTP_REFERER']; if($referer || $browser || $os){ date_default_timezone_set('Europe/Stockholm'); if($_POST['name'] && $_POST['text'] != 'Meddelande'){ $name = $_POST['name']; $text = $_POST['text']; $time = mktime(); if($_POST['link'] != '' && $_POST['link'] != 'http://'){ $link = $_POST['link']; } else{ $link = ''; } mysql_connect("localhost", "username", "password")or die("cannot connect server "); mysql_select_db("gastbok")or die("cannot select DB"); mysql_query (" INSERT INTO gb (name, message, link, time) VALUES ('$name', '$text', '$link', '$time') "); header ('Location: gastbok.php'); } else{ header ('Location: gastbok.php?k=1'); } } else{ header('Location: gastbok.php'); } ?>

Permalänk
Medlem

nu var det ju inte igår jag höll på med php, men om jag inte minns fel, så släpper du alltid igenom allt till kollen om 'name' eller 'text' är satta, eftersom du alltid sätter antingen $os eller $browser.
if ($referer || $browser || $os) utläses (väl?) som "om $referer har ett värde eller $browser har ett värde eller $os har ett värde". dvs om en av dem har ett värde, så kommer koden att köras.

sedan bör du använda mysql-real-escape-string när du tilldelar $name, $text och $link. detta för att förhindra SQL-injections.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem

Jag tror inte detta hjälper nämnvärt. På vilket sätt skulle referer,os och browsetcheck stoppa någon spambot? Det är ju inte precis rocket science att spoofa det.