Log in

View Full Version : Secure Online Form



Drewsterritz
09-08-2008, 05:55 PM
I am looking to build a secure online form. I form that bots are not able to submit information and people are allowed to see the information being sent to an email address.

Right now I have a simple form but it doesn't have any secure features. If someone could help me add or direct me to a form that already takes about this that would be great thanks.

Here is my simple form >>>

FORM ITSELF
<form name="contact" method="post" action="FormToEmail.php">
<span class="style3">
<label>Name:</label>
<input name="name" type="text">
<br>
<br>
<label>Email:</label>
<input name="email" type="text">
<br>
<br>
<label>Content:</label>
</span><br>
<textarea name="content" cols="50" rows="10"></textarea>
<br>
<input name="submit" type="Submit" value="Submit">
</form>


FORM TO EMAIL

<?php

$my_email = "dtswebdesign@gmail.com";

$continue = "index.html";

$errors = array();

if(count($_COOKIE)){foreach(array_keys($_COOKIE) as $value){unset($_REQUEST[$value]);}}

function recursive_array_check_header($element_value)
{

global $set;

if(!is_array($element_value)){if(preg_match("/(%0A|%0D|\n+|\r+)(content-type:|to:|cc:|bcc:)/i",$element_value)){$set = 1;}}
else
{

foreach($element_value as $value){if($set){break;} recursive_array_check_header($value);}

}

}

recursive_array_check_header($_REQUEST);

if($set){$errors[] = "You cannot send an email header";}

unset($set);

if(isset($_REQUEST['email']) && !empty($_REQUEST['email']))
{

if(preg_match("/(%0A|%0D|\n+|\r+|:)/i",$_REQUEST['email'])){$errors[] = "Email address may not contain a new line or a colon";}

$_REQUEST['email'] = trim($_REQUEST['email']);

if(substr_count($_REQUEST['email'],"@") != 1 || stristr($_REQUEST['email']," ")){$errors[] = "Email address is invalid";}else{$exploded_email = explode("@",$_REQUEST['email']);if(empty($exploded_email[0]) || strlen($exploded_email[0]) > 64 || empty($exploded_email[1])){$errors[] = "Email address is invalid";}else{if(substr_count($exploded_email[1],".") == 0){$errors[] = "Email address is invalid";}else{$exploded_domain = explode(".",$exploded_email[1]);if(in_array("",$exploded_domain)){$errors[] = "Email address is invalid";}else{foreach($exploded_domain as $value){if(strlen($value) > 63 || !preg_match('/^[a-z0-9-]+$/i',$value)){$errors[] = "Email address is invalid"; break;}}}}}}

}

if(!(isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && stristr($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST']))){$errors[] = "You must enable referrer logging to use the form";}

function recursive_array_check_blank($element_value)
{

global $set;

if(!is_array($element_value)){if(!empty($element_value)){$set = 1;}}
else
{

foreach($element_value as $value){if($set){break;} recursive_array_check_blank($value);}

}

}

recursive_array_check_blank($_REQUEST);

if(!$set){$errors[] = "You cannot send a blank form";}

unset($set);

if(count($errors)){foreach($errors as $value){print "$value<br>";} exit;}

if(!defined("PHP_EOL")){define("PHP_EOL", strtoupper(substr(PHP_OS,0,3) == "WIN") ? "\r\n" : "\n");}

function build_message($request_input){if(!isset($message_output)){$message_output ="";}if(!is_array($request_input)){$message_output = $request_input;}else{foreach($request_input as $key => $value){if(!empty($value)){if(!is_numeric($key)){$message_output .= str_replace("_"," ",ucfirst($key)).": ".build_message($value).PHP_EOL.PHP_EOL;}else{$message_output .= build_message($value).", ";}}}}return rtrim($message_output,", ");}

$message = build_message($_REQUEST);

$message = $message . PHP_EOL.PHP_EOL."-- ".PHP_EOL."";

$message = stripslashes($message);

$subject = "FormToEmail Comments";

$headers = "From: " . $_REQUEST['email'];

mail($my_email,$subject,$message,$headers);

?>

BLiZZaRD
09-08-2008, 07:03 PM
Form Mailer (http://www.dagondesign.com/articles/secure-php-form-mailer-script/) The most secure form mailer I have ever seen/used. Completely customizable, add any type of form area.. text, radio, check box, drop down, etc.. captcha enabled in multiple varieties to give you more control, and the base files can even be stored outside root for een more security.

You can see one of the many versions I have running here (http://cleverwasteoftime.com/contacts.html)

brentnicholas
09-08-2008, 09:30 PM
captcha is the key you are looking for on BOT control

as for security, use https and get a certificate

What they persona above said should be all you need in a nice little package. Depends how much you like to code.