草庐IT

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

coder 2024-04-12 原文

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

最佳答案

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

除了像 PGP 或 S/MIME 这样的端到端加密之外,它确实是行不通的,因为电子邮件的明文遗留问题:

  • 可以使用 TLS(使用 SMTL STARTTLS 扩展名)在 MTA 之间传输电子邮件。但是,无法将消息标记为需要它。您可以将您的 MTA 配置为需要 STARTTLS,而不是其他任何人的。 (请注意,除非您拥有 root 用户,否则您甚至无法配置 MTA。)MTA 的默认和正常配置将愉快地接受通过 TLS 的消息,并将其转发为纯文本。
  • 在需要时添加中继是正常的。在实践中,它们很常见。因此,您的消息在最终交付之前可能需要几个跃点。您可以为第一跳强制使用 TLS,但不能为其他跃点强制使用 TLS。您可以检查 Received: header 以查看消息经过了多少跃点,但这可能会随时发生变化(并且由于操作原因,它可能会因消息而异)。
  • 一般来说,邮件在传输过程中会写入磁盘。正常的 MTA 流程是接受消息、写入磁盘、确认接收、将消息发送到下一个 MTA、等待确认、从磁盘删除。您当然可以配置您的 MTA 以将这些加密存储在磁盘上,但通常不会这样做。
  • 一旦“投递”,邮件通常以明文形式存储在磁盘上。您的网络邮件提供商可能会这样做。
  • 如果您曾经使用非网络邮件客户端访问电子邮件,它很可能会将邮件以纯文本形式下载到磁盘。然后你有未加密的消息坐在随机的台式电脑上。 MUA 甚至可以通过 Internet 以纯文本形式传输消息。
  • 电子邮件可在任何地方、任何机器上轻松访问。特别是网络邮件。对于您或您公司的其他人来说,登录到从随机设备发送消息的帐户将是非常诱人的。你能保证这些设备都没有安装了任何恶意软件——键盘记录器、 session 劫持器、屏幕抓取器等吗?您能保证没有用户永远会忽略证书警告,从而引发中间人攻击吗?

除了一些最大的网络邮件提供商外,他们可能没有足够的安全性来保护 secret 身份数据。例如,如果您调用他们说您忘记了密码,他们会如何处理?或者,如果有人其他调用他们并假装是您。

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

注意:如果您使用 PGP 或 S/MIME 加密邮件,使用合理的设置(例如,3072-bit or higher RSA key 对,AES 密码),那么电子邮件信息(密文)是否泄露都没有关系;没有私钥是不可读的。使用的加密与 TLS 非常相似(但不幸的是,它不提供完美的前向安全性作为离线协议(protocol))。端到端加密可防止端点之间的不安全性。并不是说我提倡在报纸上打印密文,但即使那样也应该是安全的。当然,您必须确保保存私钥(并解密电子邮件)的机器安全。

关于php - 将信息从 Web 表单安全地发送到电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027924/

有关php - 将信息从 Web 表单安全地发送到电子邮件地址的更多相关文章

  1. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  2. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  5. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  6. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

  7. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  8. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  9. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  10. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

随机推荐