| 
	
 | 
 Posted by Justin Koivisto on 06/18/47 11:34 
xmp333@yahoo.com wrote: 
>  
> A spammer is apparently using email injection on my form, however my I 
> thought email injection requires mainpulation of the headers parameter 
> in mail() and I'm not using that parameter.  My mail call looks like: 
>  
> mail($to,$subj,$body) 
>  
> So how is the spammer getting me?  Is mail() translating to a raw 
> stream so that headers can be inserted in the body, or is there some 
> kind of buffer overflow that can be exploited?  Since I'm using dynamic 
> variables, I can't see how this would occur, but then I'm no PHP 
> expert. 
>  
> Any help would be greatly appreciated.  I know beefing up input 
> validation should take care of this, but I want to understand what the 
> spammer is doing so I can reproduce and validate this fix. 
 
Some things that I like to do when processing forms... 
 
On the page that has the form, generate some kind of token, store and 
send with request: 
 
<?php 
session_start(); 
$token = md5('my secret'.microtime().'other secret'); 
$_SESSION['token'] = $token; 
echo '<input type="hidden" name="token" value="',$token,'" />"; 
?> 
 
on the receiving page... 
 
<?php 
session_start(); 
if(isset($_POST['token']) && $_SESSION['token']==$_POST['token']){ 
    // this POST request should be a submission of my form, not a spoof 
}else{ 
    // the form submission was spoofed... 
} 
?> 
 
In addition to that, I also do some flat-out rejection stuff as well... 
Since I know the fields and what to expect, I run this test on all 
fields that should NOT contain a line break of any type: 
 
if(preg_match('`[\r\n]`',$_POST['fieldname'])){ 
    // here, we found a newline or carriage return 
    // corrupted data should be set to empty string 
    $_POST['fieldname']=''; 
 
    // decide how to handle this condition... 
} 
 
Most of the time if I find this, I'll report an error and ask for 
resubmission, but in some cases (depending on the application) I will 
simply kill execution. 
 
--  
Justin Koivisto, ZCE - justin@koivi.com 
http://koivi.com
 
[Back to original message] 
 |