On Tue, February 21, 2006 12:19 pm, cKc Consultants wrote:
> An email form that uses a simple server side php code to send the
> variable
> values managed to send:
Here is a stripped-down version of what happened:
YOUR BAD CODE:
<?php if (isset($email)){
//This next line blindly embeds the user input "$email"
//into the headers of an email message.
//This pretty much turns your server into a spam-factory.
//Don't do that!
mail('[EMAIL PROTECTED]', "From Web", $message, "From:
$email");
} ?>
<form action="hackable.php" method="post">
Your Email: <input name="email"><br />
Your Message: <textarea name="message" wrap="virtual" cols="20"
rows="10"></textarea><br />
<input type="submit" name="hack_me" value="send us email">
</form>
Here is a crude script specifically crafted to abuse the above page.
You can assume the spammers are a bit more sophisticated than this.
<?php
$hack_data = "Content-Type: multipart/alternate;\r\n...";
$post_vars = "email=$hack_data&message=&hack_me=send+us+email";
$data_len = strlen($post_vars);
$socket = fsockopen("http://example.com", 80);
fwrite($socket, "POST /hackable.php HTTP/1.0\n");
fwrite($socket, "Host: example.com\n");
fwrite($socket, "Content-length: $data_len\n");
fwrite($socket, $post_vars);
?>
> Content-Type: multipart/alternative;
>> boundary=5c7c7e682d991e8ec1f6825582ea2103
>> MIME-Version: 1.0
>> Subject: round a rock by way of anchorage
>> bcc: [EMAIL PROTECTED]
>>
>> This is a multi-part message in MIME format.
>>
>> --5c7c7e682d991e8ec1f6825582ea2103
>> Content-Type: text/plain; charset=\"us-ascii\"
>> MIME-Version: 1.0
>> Content-Transfer-Encoding: 7bit
>>
>> system expict th time is
>> --5c7c7e682d991e8ec1f6825582ea2103--
>>
>
> This appears between responses to "$msg.=" and shouldn't be something
> the
> user could see. In order to figure out how to prevent this, I need to
> know
> how it was done. I know I need to validate the email address more
> closely,
> but I'm curious as to what created this. I've found some interesting
> articles on the web, but nothing seems to deal with this issue.
> Pointing me
> in the right direction would be appreciated!
Having the above kind of junk in the message body itself is not really
a huge huge problem -- And it's almost impossible to avoid it without
crippling the legitimate input for a message BODY.
Buuuuuuuuuuuuuuuuuuuuuuut:
An email address, which you are splicing into the HEADERS as the
fourth argument to PHP's http://php.net/mail function should *NOT*
have any kind of crap like this in it.
In fact, if an email contains a newline, you can pretty much assume
the user is a spammer trying to abuse your script to do Evil Things...
Actually, a "real" user might manage to have a leading/trailing
newline when they paste an email address into a web form.
Amened the preceding statement to:
If an email contains an embedded newline, they are a spammer.
So, to secure your mail() script do this:
$email = trim($_REQUEST['email']);
if (strstr($email, "\n")){
die("spammer");
}
//now it's "safe" to send the email.
You also should sanitize the input for $subject since that ALSO gets
spliced into the headers of an email.
You could, perhaps, perform additional validation upon $email, looking
for a specific format involving @ and "dots" and so forth -- but be
warned that you are likely to inadvertantly reject valid email
addresses, and are guaranteed to accept worthless email addresses no
matter how rigorous your validation...
So I personally don't think it's wise to attempt to validate an email
address as syntactically valid "email address" for a simple form mail.
But then, I've been burned by a BUNCH of web-sites that reject MY
email address as "invalid" and am biased by that. :-)
--
Like Music?
http://l-i-e.com/artists.htm
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php