----- Original Message ----- 
From: "Greg"
> --- In php-list@yahoogroups.com, "Bob" <[EMAIL PROTECTED]> wrote:
>> 
>> Add a random $_GET number to your contact-me website link, and
> compare it with a session that is also sent. 
> 
> Can you expand on that a little?

Hi Greg,
I've found a much better solution now, than the above.
As most remote posting now comes as a double hit, the 1st entering by the 
correct link.
The 2nd, usually within a second or 2 (possibly a refresh or something) with 
all your form $_POST variables set.
This defeats most protection comparing a session variable to a $_GET variable, 
or anything else you try to do.

<?php
session_start();

// Compare actual time with the time set by your form.
// If less than 4 seconds, error!
// Then use a session variable to see if this is the 1st pass.
// If it is and any $_POST is set, error!

if (isset($_POST['system']) && time()-$_POST['system'] <= 4)
{
  reportError('Double Hit', 'Exit');
}
elseif (!isset($_SESSION['firstpass']) && $_POST)
{
  reportError('Preset Posts', 'Exit');
}
$_SESSION['firstpass'] = 'Set';

// Input validation etc and whatever else you need here.

// Set a session var = to a random value.
$_SESSION['sessId'] = $formId = dechex(mt_rand());

<input type="hidden" name="formId" value="<?php echo $formId; ?>" />
<input type="hidden" name="system" value="<?php echo time(); ?>" />

// If the $_SESSION['sessId'] doesn't match the hidden $formId, error again!

There is so much more I use (including a [EMAIL PROTECTED] and swear filter), 
but now comes the best part!
I tried all sorts then just happened to try this.

In my error function($error, $flag)

if ($flag == 'Exit')
{
  session_unset();
  session_destroy();
  header('Location: http://No-Spam-Thanks.OK');
  exit;
}

As you can see, this is a non-existant location.
It throws a spanner in the works of an automated list.
I was on at least 3 automated lists, and as soon as I tried this 2 days ago, 
all attempts immediately stopped, and non since!
Regards, Bob E.


Reply via email to