|
Posted by onembk on 08/29/06 05:14
On 2006-08-28 17:07:49 -0600, jwhitley31NOSPAM@colo.edu (J W) said:
> Hello,
>
> I am kind of a newb to php and could use some help. I have made a form
> to email php page that uses the mail function to send me the results of
> a form. The php portion looks like this:
>
> <?PHP
> if ($submit) {
> $Address = !empty($Address) ? $Address : 'NA';
> $Address2 = !empty($Address2) ? $Address2 : 'NA';
> $City = !empty($City) ? $City : 'NA';
> $State = !empty($State) ? $State : 'NA';
> $Country = !empty($Country) ? $Country : 'NA';
> $Postal = !empty($Postal) ? $Postal : 'NA';
> $Phone = !empty($Phone) ? $Phone : 'NA';
> $Company = !empty($Company) ? $Company : 'NA';
> $EmailNot = !empty($EmailNot) ? $EmailNot : 'NO';
> $today = date("m/d/y"); mail("me@mydomain.com",
> "Info on $Regarding",
> "A User has submitted a Contact form on Mydomain.com
> on $today
> ================================================
> Name: $FName $LName
> Email: $Email
> Address: $Address
> $Address2
> $City
> $State
> $Country
> $Postal
> Phone: $Phone
> Company: $Company
> Message: $Comment
> Referer: $Referer
> Opt-Out: $EmailNot",
> "From: $FName $LName <$Email>");
> header ("location: thanks.html");
> } // end if they hit "Submit"
> ?>
>
> Later on the page is the form itself (edited for brevity):
>
> <form name="contactinfo" method="post">
> (various input areas)
> </form>
>
> I know that as is this page isn't secure from a spammer exploiting it
> for their own purposes. Can someone help me clean it up to protect
> against that kind of thing? I believe the input data has to be
> validated / scrubbed or something? I've been googling and while I
> understand the concept I'm not quite getting how to do it within the
> framework of what I have already created,
>
> Thanks much.
You will need to verify that a hacker hasn't injected extra lines into
your To/CC/BCC/From/Subject fields. Looking at your code above I'd be
most concerned about the $Regarding variable as it could be used for
this. Here is a simple example:
if (stristr($Regarding, '\n') !== false || stristr($Regarding, '\r')
!== false || stristr($Regarding, "\n") !== false || stristr($Regarding,
"\r") !== false || stristr($Regarding, '%0A') !== false)
{die("hacker");}
Note '\r' is the string \r while "\r" is a carriage return, "\n" means
newline and '%0A' aslo creates a newline. If $Regarding was equal to
"spam subject%0ABcc: someoneselse@somewhereelse.com" I could send
someoneelse@somewhereelse.com some spam since everything after 'spam
subject' is on a separate line. Email protocols would see this as a
separate email header. This applies to any field a user has access to
other than the actual body of the email.
See http://www.w3schools.com/php/php_secure_mail.asp The example there
nicer than mine.
Navigation:
[Reply to this message]
|