Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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_Email - Fatal编程技术网

Php 任何人都可以发送电子邮件的安全问题

Php 任何人都可以发送电子邮件的安全问题,php,email,Php,Email,我有一个网络服务器,让我发送电子邮件(使用PHP),我可以使任何人的发件人。。。为什么这是可能的?这怎么不是一个安全问题 使用php邮件函数 // 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"; // Additio

我有一个网络服务器,让我发送电子邮件(使用PHP),我可以使任何人的发件人。。。为什么这是可能的?这怎么不是一个安全问题

使用php邮件函数

// 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 .= 'To: Jon Ives <jives@apple.com>' . "\r\n";
$headers .= 'From: Tim Cook <tcook@apple.com>' . "\r\n";

$message = 'I need you to create a clear iPhone.';

// Mail it
mail($to, $subject, $message, $headers);

远程服务器解析为apple.com,因此它将始终位于那里

现在,远程服务器只知道您的SMTP地址(不在乎)

由于发件人在电子邮件标题中被提及,因此正在使用该邮件

结论:这就是电子邮件的工作原理


我希望我的解释尽可能简单。

你说的是伪造的信息;发送是可能的,尽管收件人接收消息的可能性很小。有一些安全措施可以防止邮件伪造:

  • 域密钥
  • DKIM
  • SPF
  • 森德里德
  • 域密钥已被弃用,取而代之的是DKIM。两者非常相似。SO帖子描述了这种差异

    SPF和SenderID有时会相互混淆,但它们是不同的;看

    实现和利用这些技术取决于收件人的SMTP服务器。例如,如果收到邮件但SPF检查失败,则该邮件将被标记为垃圾邮件,然后进入“垃圾邮件文件夹”,但该邮件仍被接受。更进一步,SMTP服务器还可以验证消息的DKIM签名;如果验证失败,消息将不被接受。这些策略和邮件路径由接收邮件的服务器/客户机决定,差异很大

    发件人策略框架(SPF)/发件人ID 发件人策略框架(SPF)是一个电子邮件验证系统,旨在通过验证发件人IP地址来检测电子邮件欺骗(一种常见漏洞),从而防止电子邮件垃圾邮件。SPF允许管理员通过在域名系统(DNS)中创建特定的SPF记录(或TXT记录)来指定允许哪些主机从给定域发送邮件。邮件交换器使用DNS检查来自给定域的邮件是否由该域管理员认可的主机发送

    资料来源:

    与SPF相反,SenderID会验证声称的责任地址(PRA),请参阅

    基本上,这是一个DNS检查,询问“IP地址X可以为域Y发送邮件吗?”

    想象一下这个场景:苏西给维多利亚写信。苏西先发制人地告诉维多利亚,只有苏西的兄弟约翰和苏西自己会给她送信。于是苏茜把信交给约翰,让他沿着街走,把信交给维多利亚。维多利亚听到敲门声,约翰拿着苏西的一封信;由于事先约定,苏茜接受了这封信。几天后,苏西又给维多利亚写了一封信,但约翰病了,无法送信;因此,苏西让她的邻居里克沿着街道走去,把信交给维多利亚。瑞克敲了敲维多利亚的门,说他有一封苏西的信。Victoria拒绝了这封信,也不接受它(或者她可能会把它放在桌子上,以防它有可能是合法的),因为她希望只有Susie和John会递送Susie的信

    Example.com的示例SPF记录:

    spf2.0/mfrom ptr:mx.example.com +a +ip4:192.168.1.1 -all
    
    此SPF记录表示,只有来自服务器
    mx.example.com
    、属于example.com的所有
    A记录以及IPv4地址
    192.168.1.1
    的邮件才能发送example.com的电子邮件,其他邮件都不能发送(
    -all

    域密钥识别邮件(DKIM)/域密钥 我将重点讨论DKIM,因为DomainKeys有一半不推荐使用,但前提是相同的

    DomainKeys Identified Mail(DKIM)是一种将域名与电子邮件关联的方法,从而允许个人、角色或组织对邮件承担一定责任。该关联通过可由收件人验证的数字签名建立。签名者通过在消息头中添加DKIM Signature:字段来声明责任,这与消息的实际作者或收件人无关。验证器使用DNS恢复签名者的公钥,然后验证签名是否与实际消息的内容匹配

    DKIM与SPF的不同之处在于SPF仅与DNS绑定,而DKIM是邮件本身中存在的签名。如果您熟悉的概念,这就是DKIM的本质。发送方拥有用于加密消息的私钥;它使公钥可访问(通过DNS TXT记录)仅用于解密

    基本上,DKIM会问这样一个问题,“我收到的消息真的是来自发送者X吗?”

    想象一下这个场景:苏西给维多利亚写信。除了这封信,还有苏西设计的加密密码。苏茜让里克把信带到维多利亚那儿去。瑞克敲了敲维多利亚的门,拿出了这封带有加密密码的信。在收到这封信之前,维多利亚拿出了她的“解密书”(把它想象成白页——一个公开的解密代码列表,但不用于加密);她解密密码,发现它实际上是苏茜的签名,然后接受瑞克的信息。记住,没有人能伪造Susie的签名,除非Susie释放她的加密密钥


    有没有办法从电子邮件中伪造日期和时间

    有点。发送日期如下:

    $headers .= 'Date: 2010-1-2 12:32:13' . "\r\n";
    
    但是,接收SMTP服务器将始终在邮件上添加自己的时间戳。根据邮件服务/客户端的不同,可以读取
    日期
    标头,也可以读取另一个元时间戳(例如,接收SMTP服务器添加到标头)

    举个例子,我相信gmail会尊重发件人设置的
    日期
    标题——我看到了1970年1月1日(Unix e.com的开始)的电子邮件
    $headers .= 'Date: 2010-1-2 12:32:13' . "\r\n";