Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止邮件表单中插入电子邮件的最佳方法是什么?_Php_Security_Email_Code Injection - Fatal编程技术网

Php 防止邮件表单中插入电子邮件的最佳方法是什么?

Php 防止邮件表单中插入电子邮件的最佳方法是什么?,php,security,email,code-injection,Php,Security,Email,Code Injection,您好,我已经构建了一个电子邮件表单,我想知道它是否以安全的方式构建。 我已经阅读了这篇文章,并将其应用到我的脚本中。现在我想知道变量$to和$bcc是否保存 function sendmail($to,$subject,$message,$bcc=NULL){ //Prevent Email Injection in Your PHP Form to Mail Scripts if ( preg_match( "/[\r\n]/", $to ) || preg_match(

您好,我已经构建了一个电子邮件表单,我想知道它是否以安全的方式构建。
我已经阅读了这篇文章,并将其应用到我的脚本中。现在我想知道变量$to和$bcc是否保存

function sendmail($to,$subject,$message,$bcc=NULL){

    //Prevent Email Injection in Your PHP Form to Mail Scripts
    if ( preg_match( "/[\r\n]/", $to ) ||  preg_match( "/[,]/", $to ) || preg_match( "/[\r\n]/", $bcc ) || preg_match( "/[,]/", $bcc ) ) {

        return '<h1>Danger found: possible email Injection Hijacking</h1>';
        return false;

    }else{
        // To send HTML mail, the Content-type header must be set
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

        // Additional headers
        $headers .= 'From: No Reply <no-reply@domain.nl>' . "\r\n";
        if(isset($bcc)) $headers .= 'Bcc: ' .$bcc."\r\n";

        // Mail it
        return mail($to, $subject, $message, $headers);
    }
}
sendmail($_REQUEST['email'],'Subjectline', 'message','admin@domain.com');
函数sendmail($to、$subject、$message、$bcc=NULL){
//防止在PHP表单中向邮件脚本注入电子邮件
如果(预匹配(“/[\r\n]/”,$to)|预匹配(“/[,]/”,$to)|预匹配(“/[\r\n]/”,$bcc)|预匹配(“/[,]/”,$bcc)){
返回“发现危险:可能存在电子邮件注入劫持”;
返回false;
}否则{
//要发送HTML邮件,必须设置内容类型标题
$headers='MIME版本:1.0'。“\r\n”;
$headers.=“内容类型:text/html;字符集=iso-8859-1”。“\r\n”;
//附加标题
$headers.=“发件人:无答复”。“\r\n”;
如果(isset($bcc))$headers.='bcc:'。$bcc.\r\n”;
//邮寄
返回邮件($to、$subject、$message、$headers);
}
}
sendmail($_请求['email'],'Subjectline','message','admin@domain.com');

确保只有一封电子邮件使用以下方法替换$str(字符串):


邮件中的漏洞来自标头注入。为了防止出现这种情况,您可以在标题值中查找换行符,即:

"BCC: " . $email . "
X-OtherHeader: Foo-Bar
如果
$email
包含换行符,如:

webmaster@domain.com
TO: pro@hackerz.ru
您将获得一个额外的TO头,这可能是恶意的。标头注入允许攻击者从您的邮件服务器向任何人发送电子邮件,实质上将您的邮件服务器变成垃圾邮件服务器


从外观上看,您当前的脚本是安全的。

第一个if语句中的return false没有用,因为函数已经返回了上面一行的字符串。如果引用,它们可以是电子邮件地址中的有效字符:
webmaster@domain.com
TO: pro@hackerz.ru