Header injection relies on being able to insert additional newlines into header variables, which makes the string look like a new header.
For example, allowing a subject value of Testing
Cc: [email protected]
Some body text
would result in a message header containing:
Subject: Testing
Cc: [email protected]
Some body text
i.e. the abuser has not only added additional recipients, but they've managed to supply their own body text too.
However in your case the $toaddress
is constant, and even if $toaddress
had been user-supplied it should be correctly sanitised by the mail()
function.
Your subject header is similarly constant
The $message
variable is safe because by definition that's the body text and only sent after the real headers.
That only leaves $fromaddress
, and you're already using FILTER_VALIDATE_EMAIL
on that which should also reject anything with a newline in it.
However you should strictly be checking the result of that test, and aborting the whole thing if the result is FALSE
. As it is if the validation fails then mail()
will complain about being given a blank From:
address, but there's no header injection opportunity there.
As far as I can tell, then, this code is actually secure.
Also, IMHO, you shouldn't send the emails from the user-supplied email address. That would fall foul of anti-spam mechanisms such as SPF.
You should use a constant From:
value belonging to your own domain. If you like you could then use a correctly sanitised value in the Reply-To
header to make it easier to have the subsequent reply go to the desired address.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…