安全地将信息从Web表单发送到电子邮件地址

swu*_*dev 5 php security

是否可以让用户在HTTPS安全站点上的表单中输入信息,然后使用PHP将该信息安全地发送到电子邮件地址?如何加密电子邮件,以便从HTTPS站点发送和通过HTTPS电子邮件检查它之间是否安全?这有多可行,潜在的缺陷是什么?

der*_*ert 6

您可以使用PGPS/MIME加密电子邮件.这些将需要您的客户端的特殊支持来解密.大多数网络邮件提供商都没有这个(尽管可能有例如Firefox扩展使它工作).

除了像PGP或S/MIME这样的端到端加密之外,由于电子邮件的明文遗产,它实际上是不可行的:

  • 可以使用TLS(带有SMTL STARTTLS扩展名)在MTA之间传输电子邮件.但是,没有办法将消息标记为需要它.您可以 MTA 配置为需要STARTTLS,而不是其他任何人.(请注意,除非您有root用户,否则甚至无法配置MTA.)MTA的默认和正常配置将很乐意接受通过TLS发送的消息,并将其转发为纯文本.
  • 在需要时添加继电器是正常的.在实践中,它们很常见.因此,在最终交付之前,您的消息可能需要几个跳.您可以强制第一跳的TLS,但不能强制执行其他任务.您可以检查Received:标头以查看消息占用了多少跳,但这可能随时发生变化(出于操作原因,它可能会因消息而发生变化).
  • 一般来说,传输过程中的邮件会写入磁盘.正常的MTA进程是接受消息,写入磁盘,确认接收,向下一个MTA发送消息,等待确认,从磁盘删除.您当然可以将MTA配置为将这些存储在加密的磁盘上,但通常不会这样做.
  • 一旦"交付",邮件通常以明文形式存储在磁盘上.您的网络邮件提供商可能会这样做.
  • 如果您使用非Webmail客户端访问该电子邮件,则很可能以纯文本格式将邮件下载到磁盘.然后,您可以在随机桌面PC上找到未加密的消息.MUA甚至可以通过因特网以纯文本形式传送消息.
  • 任何机器都可以轻松访问电子邮件.尤其是网络邮件.对于您或您公司中的其他人来说,登录到从随机设备发送消息的帐户将非常诱人.你能保证这些设备都没有安装任何恶意软件密钥记录器,会话劫持器,屏幕刮板等吗?你能保证没有用户会永远忽略证书警告,实现了中间人攻击?

除了一些最大的网络邮件提供商,他们可能没有足够的安全性来保护机密身份数据.例如,如果你打电话给他们并说你忘记了密码,他们如何处理?或者,如果没有别人叫他们起来,假装是你.

最后,即使使用PGP或S/MIME,您仍然会遇到以下问题:在现实世界中,电子邮件可能并且确实会丢失.您的网站可能会发送一条消息,确认该消息已被接受发送,然后该消息永远不会到达 - 甚至不会发送到垃圾邮件文件夹.这对于有价值的数据通常是不可接受的.

注意:如果使用PGP或S/MIME加密消息,使用合理的设置(例如,3072位或更高的 RSA密钥对,AES密码),那么电子邮件消息(密文)是否被公开并不重要; 没有私钥,它是不可读的.使用的加密与TLS非常相似(但遗憾的是,它不提供完美的前向安全性作为其离线协议).端到端加密可以防止端点之间的不安全感.并不是说我主张在报纸上打印cihertext,但即使这样也应该是安全的.当然,您必须保持拥有私钥的机器(并解密电子邮件)安全.