Hallo,
Ik zoek code waarmee ik een form kan beveiligen met een sessie, zodat iemand niet 2x het formulier kan invullen. Het gaat om een petitie, de code die ik nu heb staat hieronder. Is er iemand die toevallig een code gratis wil delen?
PHP Code:
<?php
$host = "localhost"; //99% van de gevallen localhost
$user = "XXX"; //gebruikersnaam
$pass = "XXX";//Database wachtwoord
$db = "XXX"; //Database naam
mysql_connect($host,$user,$pass) or die(mysql_error());
mysql_select_db($db);
if($_SERVER["REQUEST_METHOD"]=="POST")
{
//Insert het email,naam van de persoon in database
mysql_query("INSERT INTO `petitie` ( name, email )
VALUES ('".$_POST["name"]."', '".$_POST["email"]."')") or die (mysql_error());
echo "<font face=arial><br><br><big><center>Bedankt voor het tekenen van de petitie!</center></big></font>";
print "<META HTTP-EQUIV='Refresh' CONTENT='2; URL=".$_SERVER['PHP_SELF']."'>";
}
?>
<div align="center"> <body bgcolor="DED3B9">
<p><strong><font face="arial" size="5">Petitie</font></strong></p>
<form name="form1" method="post" action="<?php print $_SERVER['PHP_SELF']; ?>">
<table width="70%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="38%" rowspan="6"> </td>
<td width="62%"> <br> <br> </td>
</tr>
<tr>
<td><strong><font face="arial">Naam:</font></strong></td>
</tr>
<tr>
<td><strong>
<input type="text" name="name">
</strong></td>
</tr>
<tr>
<td><strong><font face="arial">E-mail:</font></strong></td>
</tr>
<tr>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td><input type="submit" name="Submit" value=" Tekenen "></td>
</tr>
</table>
</form>
<br>
<br>
<fieldset><legend>
<strong><font face="arial" size="3">
Informatie</font></strong></legend>
<font face="arial">Info over de petitie hier.</font></td>
</fieldset>
<br><br>
</div>
<div align="center">
<table width="70%" border="0" cellpadding="0" cellspacing="1" bgcolor="#CBBB99">
<tr>
<td><table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr bgcolor="#CBBB99">
<td> <div align="left"><font face="arial" color="#000000"><strong>Personen</strong></font></div></td>
</tr>
<?php
// Uitlezen van emails
$lezen = mysql_query ("SELECT * FROM `petitie` ORDER BY `id` DESC");
$count_rows = mysql_num_rows ($lezen);
while ($read = mysql_fetch_assoc($lezen))
{
//Verander collom kleur
$kleur = ($i++ % 2) ? "#F2E5BF" : "#E6CFA2"; //Te veranderen
?>
<tr bgcolor="<?php echo $kleur; ?>">
<td><font face="arial"><?php echo $read['name']; ?></font></td>
</tr>
<?php
}
?>
</table></td>
</tr>
</table>
<table width="70%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#CBBB99"><font face="arial" color="#000000">Er zijn <b><? echo $count_rows; ?></b>
personen die de petitie getekend hebben.</font></td>
</tr>
</table>
<p> </p>
</div>
- Form met sessie beveiligen (per IP)
-
12-12-2011, 21:34 #1Particulier
- Berichten
- 570
- Lid sinds
- 15 Jaar
Form met sessie beveiligen (per IP)
-
In de schijnwerper
FactuurWijzer.nl | interessant | DA14 - GEEN RESERVEDomein te koopColocatie aanbieding! - 1U COLO, 1Gbps UPLINK, 25TB TRAFFIC = €29 p/m !HostingOntvang gegarandeerd meer websitebezoekers met ons SEO & Maand Linkbuilding Pakket!Freelance / WerkVeiling: Kadogids.nl, voor een prikkieDomein te koop -
12-12-2011, 21:52 #2
- Berichten
- 1.267
- Lid sinds
- 15 Jaar
Re: Form met sessie beveiligen (per IP)
session_start();
$_SESSION['last-input'] = time();
if((time() - 3600) < $_SESSION['last-input'])
Zou het persoonlijk niet met sessie's doen, enfin. Succes ;)
-
14-12-2011, 06:04 #3
- Berichten
- 753
- Lid sinds
- 15 Jaar
Re: Form met sessie beveiligen (per IP)
Sessies zijn inderdaad geen oplossing voor wat je wilt.
Je zou het ip per petitie moeten opslaan in een database om 100% zeker te weten dat niemand dubbel post.
-
14-12-2011, 17:56 #4Particulier
- Berichten
- 570
- Lid sinds
- 15 Jaar
-
14-12-2011, 18:08 #5
- Berichten
- 2.611
- Lid sinds
- 15 Jaar
-
14-12-2011, 19:05 #6
- Berichten
- 372
- Lid sinds
- 17 Jaar
Re: Form met sessie beveiligen (per IP)
Code:// database CREATE TABLE ip_adressen ( ip VARCHAR(255) NOT NULL );
Code:<?php // deze code plaatsen waar de gebruiker terecht komt als de petitie is ingevuld. $query = "INSERT INTO ip_adressen (ip) VALUES ('".$_SERVER['REMOTE_ADDR']."')"; mysql_query($query) or die('Error, insert query failed'); $send = mysql_query($query)or die(mysql_error()); ?>
Code:<?php // code voor de form $sql = 'SELECT ip FROM ip_adressen WHERE ip = "'.$_SERVER['REMOTE_ADDR'].'"'; $res = mysql_query($sql); if (empty(mysql_num_rows($res))){ // echo hier plaatsen met de melding dat petitie al ingevuld is. } else { // form hier plaatsen } ?>
-
16-12-2011, 21:12 #7
- Berichten
- 279
- Lid sinds
- 16 Jaar
Re: Form met sessie beveiligen (per IP)
Plaats ook even een een input veld in de vorm van:
<input type="text" name="checkName" value="" style="display:none;" />
Controlleer of checkname leeg is. Is hij niet leeg dan heb je een bot want een echte bezoeker kan het veld niet zien.
-
16-12-2011, 21:14 #8Particulier
- Berichten
- 292
- Lid sinds
- 13 Jaar
Re: Form met sessie beveiligen (per IP)
Lennart, bots zien die style nog wel, zo ver zijn ze wel. Ik zou het even in een div zetten en die (in de head) op display:none; zetten.
-
16-12-2011, 21:54 #9
- Berichten
- 694
- Lid sinds
- 14 Jaar
Re: Form met sessie beveiligen (per IP)
Wat is er mis met?:
PHP Code:<input type="hidden" name="checkName" value="" />
-
16-12-2011, 22:07 #10Particulier
- Berichten
- 292
- Lid sinds
- 13 Jaar
Re: Form met sessie beveiligen (per IP)
Een bot gaat geen hidden-velden of non-displayed velden bewerken en de twee genoemde omzeilen ze doorgaans wel doordat ze zien dat het verborgen is. Een parent-div verhelpt dit al in de meeste gevallen.
-
16-12-2011, 22:10 #11
- Berichten
- 694
- Lid sinds
- 14 Jaar
-
16-12-2011, 22:46 #12Particulier
- Berichten
- 292
- Lid sinds
- 13 Jaar
Re: Form met sessie beveiligen (per IP)
Eerste google result: http://www.ustrem.org/en/articles/html-form-anti-spam-en/
Wat jij deed:This is the easiest one - just add a hidden input in the form and name it with some common name. For example let's have a comment form with only name and comment. Then we add hidden input named "email":
*example*
There's one issue with the above approach and it is that the hidden field is actually marked as hidden in the HTML. This make detection very easy. To overcome this, use CSS to cover this:
*example*
En dan hebben we nog een laatste manier, die css over een div class gebruikt die los staat van het inputfield. Deze div heeft een absolute positiewaarde maar de display is nog steeds 'block'. Het zou wel een hele knappe bot zijn als hij dit nog kon vinden. Het is iets anders dan de parent div die ik beschreef, de methode die ik nu zie is namelijk veel effectiever.
Desondanks klopte jouw opmerking niet en is bij deze vergelijking uitgelegd dat jouw oplossing de minst veilige was. Daarna die van Lennart (css i.p.v. hidden als type), dan die van mij (omdat de css niet hetzelfde element betreft) en als veiligste de laatst genoemde methode in mijn bron. Daar was ik zelf ook zo snel niet opgekomen.Laatst aangepast door Jaime D : 16-12-2011 om 22:54
-
16-12-2011, 23:06 #13
- Berichten
- 694
- Lid sinds
- 14 Jaar
Re: Form met sessie beveiligen (per IP)
Een beetje bot negeert de met CSS verborgen content niet, dat doet Google ook niet.
-
17-12-2011, 10:10 #14
- Berichten
- 1.267
- Lid sinds
- 15 Jaar
Re: Form met sessie beveiligen (per IP)
<input type="hidden" /> wordt standaard door bost genegeerd
<input type="text" style="display:none;" /> wordt ook genegeerd.
<div><input type="text" /></div> wordt niet genegeerd.
div>input[type="text"] {
display:none;
}
Bots gaan hem invullen omdat ze denken dat het een normaal veld is, terwijl hij door CSS wordt verborgen. 'Normale' bezoekers zullen dit veld natuurlijk 'nooit' invullen ;-)
Al met al is dit wel 1 van de brakste manieren om bots tegen te gaan. Maak gewoon gebruik van reCaptcha of SecurImage ;)
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic