Java/Mysql 服务器程序中的电子邮件帐户密码存储

2024-03-12

我处于一个棘手的境地,我正在编写一个应用程序,使用我公司的电子邮件帐户向客户发送电子邮件。这里的问题是我必须拥有该帐户的密码才能使服务器上的邮件服务从该帐户发送电子邮件。我知道密码永远不应该以纯文本形式存储,尤其是用于重要电子邮件帐户的密码。这里的困境是程序需要有实际的纯文本密码来发送电子邮件,因此需要将其存储在程序可以访问的地方。该程序使用 MySQL 数据库来存储信息,因此我想到了三个选项:

1) 将密码存储在程序的内存中,即私有的最终字符串字段。

2) 服务器上可以读取密码的文件

3) MySQL 数据库中的某个位置。

我认为 1 是最安全的选择,但是有人有办法处理这种情况,以尽量减少密码落入坏人之手的风险吗?谢谢你的建议!


指出 SMTP 不需要身份验证的评论是正确的。也就是说,三个全部假设服务器使用商用硬件和软件,您指定的选项中有一些是不安全的。我将说明为什么每个都是不安全的,尽管我不会遵循您最初的命令。

2) 服务器上可以读取密码的文件

3) MySQL 数据库中的某个位置。

如果有人窃取服务器怎么办?然后,他们只需打开文件或数据库,读取密码,即可立即访问公司中的所有重要信息。因此,除非你日夜都有武装警卫包围服务器,否则这已经相当不安全了。

但情况变得更糟。没有哪个计算机系统是完全不会受到攻击的,过去几年中几次广为人知的攻击(例如索尼的 PlayStation Network)表明,攻击者无需物理访问即可获取磁盘文件和数据库的内容。此外,从你的问题来看,有问题的服务器似乎是为了接受来自外界的数据包(HTTP 请求、传入电子邮件等),这会增加你的攻击面。

1) 将密码存储在程序的内存中,即私有的最终字符串字段。

这很诱人,但这比选项 2 或选项 3 更有害。一方面,私有最终字符串字段存储在 Java 编译器生成的 .class 文件中,因此使用此选项您已经存储了未加密的密码在服务器的硬盘上。在按照选项 2 或 3 破坏服务器后,攻击者可以运行javap为了从 .class 文件中获取明文密码。

不过,这种方法会进一步拓宽您的攻击面。如果密码作为源代码的一部分存储,那么突然之间,所有处理该代码的开发人员都可以使用该密码。根据最小权限原则,开发人员不应该知道额外的密码,这是有充分理由的。如果有任何一个开发商的当机器从外部被盗或被入侵时,攻击者可以查看被入侵机器的硬盘并获取明文密码。然后是源代码控制。源代码控制真正重要的好处之一是它允许您检查代码的任何先前版本。因此,即使您将来切换到安全方法,如果密码曾经进入源代码控制,那么源代码控制服务器就是一个潜在的攻击点。

所有这些因素加起来表明,即使 HTTP/邮件服务器的安全性是一流的,选项 1 也会大大增加攻击面,以至于 HTTP/邮件服务器的安全性并没有真正的帮助。


额外的细节:在一开始我指定“假设服务器使用商品硬件和软件”。如果您不使用商用硬件和软件,则可以执行诸如从只读存储启动并仅使用加密数据库之类的操作,从而要求人员在每次启动时提供解密密钥。此后,解密的信息仅存在于内存中,并且永远不会写入磁盘。这样,如果服务器被盗,攻击者必须拔掉服务器的电源,从而丢失仅存在于内存中的所有解密信息。这种设置有时用于 Kerberos KDC(将服务器放在上锁的盒子中以提供额外的安全性),但很少使用其他方式,并且坦率地说,当有一种简单的方法可以解决您的问题而无需执行所有这些额外操作时,这种设置就显得有些过分了费用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java/Mysql 服务器程序中的电子邮件帐户密码存储 的相关文章

随机推荐

  • ruby: `read': File.read 处的参数无效 -(Errno::EINVAL)

    我正在做一个简单的脚本来检查所有文件的 crc require zlib exit if Object const defined Ocra files Dir glob File open dir txt a do file file p
  • 了解触摸事件

    我正在尝试让我的一些库与触摸设备一起使用 但我很难弄清楚它们是如何支持的以及它们是如何工作的 基本上有5个触摸事件 https developer mozilla org en US docs DOM Touch events 但移动浏览器
  • C#中访问内存地址

    我正在与 ActiveX 组件交互 该组件为我提供内存地址和字节数 如何编写 C 程序来访问从给定内存地址开始的字节 有没有一种方法可以本地实现 或者我必须与 C 接口 ActiveX 组件和我的程序是否共享相同的内存 地址空间 您可以使用
  • THREE.BufferGeometry - 访问面索引和面法线

    在 BufferGeometry 中 有没有一种方法可以访问面索引和法线而不转换为几何图形 手头的几何体是由 Threejs 编辑器创建的 SphereBufferGeometry 我只需要读取面部索引和法线 而不需要修改它们 Buffer
  • Google 结账通知确认失败

    我有一个被调用的回调 url 我可以处理它 但是 Google 不会处理我的确认 这一切都在EnvironmentType Sandbox 在 Google 结帐 集成控制台 中 我收到以下消息 我们在处理您的通知确认时遇到错误 我们得到的
  • 使用 ItemTouchHelper 时,如何在拖动时取消对 RecyclerView 中项目的拖动?

    背景 我试图拥有一个具有不同视图类型的 RecyclerView 但具有拖放功能以及单击和长按操作的能力 它与 电话 应用程序类似 您可以在其中更改收藏夹项目的顺序 在 电话 应用程序上 当您长按某个项目时 会立即出现上下文菜单 如果继续拖
  • 配置器中的组合数量

    我被要求编写一个例程来决定产品配置器中可能的组合数量 配置器非常简单 尽管它具有比这更多的功能 但它可以建模为多个 单选组 如 UI 控件 其中必须选择 n 个选项之一 唯一可以使用的约束是规则 如果选择了一个选项 则不能选择另一个选项 所
  • Pandas 两个分组的 DataFrame 列的简单关联

    有没有一种好方法来获取两个分组的 DataFrame 列的简单关联 看来无论熊猫怎样 corr 函数想要返回一个相关矩阵 例如 i pd MultiIndex from product A B C np arange 1 11 1 name
  • 如果 url 不包含某些字符串,则 htaccess 重定向

    我想将所有传入请求重定向到另一个网址 如果它不包含 和 admin 我需要它用于 angular js 但我有 admin 和 php 例如 http example com link to article http example com
  • JavaScript 检测/浏览器统计

    这个问题已经被问过几次了 但我认为仍然值得与你们核实以获得更多意见 我的所有网站都使用 Google Analytics 进行统计 由于它依赖于 JavaScript 我认为检查有多少人在其浏览器中启用 禁用了 JS 是很重要的 我记得我经
  • 如何从 Azure 数据工厂连接到 Firebird/InterBase (Syntess) 数据库?

    在 ADF 中 我创建了一个管道 源是 ODBC 表或查询 下一步是创建链接服务 集成运行时已创建并选择 如下所示 现在问题来了 我应该输入什么连接字符串 尝试与Server 192 168 1 35 Database dbname DSN
  • Tomcat - 如何指定可以在 server.xml 中扩展的属性

    目前 我的 server xml 中有
  • 用Java从视频中获取缩略图

    我想从 servlet 或任何其他服务器端 Java 方法中的视频创建缩略图 视频文件上传到服务器上 上传后应创建缩略图 我的问题不是创建缩略图 而是仅创建一个或一定数量的缩略图 到目前为止我的代码 public class Test pu
  • __format__ 方法应该如何用于 int?

    我看到有一个 format 方法但有帮助 int format 不提供任何帮助 我也知道你不应该打电话给 method 直接地 什么时候调用这个方法 它的论据是什么 它用于 Py3k 的新字符串格式化方案 您可以在这里找到更多信息 http
  • 我应该将所有项目存储在一个还是多个存储库中?

    我目前正在使用 TortoiseSVN 来管理我目前正在进行的几个项目 当我第一次将所有内容移至源代码管理中时 我不太确定应如何布置所有内容 因此我最终将每个项目放入其自己的存储库中 我想知道将它们全部移动到一个大存储库中并将它们分成项目文
  • 为什么我们要转换 malloc 的返回值? [复制]

    这个问题在这里已经有答案了 有人可以向我解释一下为什么有些程序员在 malloc 前面使用 char 吗 我知道它返回 void 但为什么我希望它只返回 char 内存 抱歉 我只是编程新手 谢谢 无需转换返回值malloc因为它的返回类型
  • C# 中的 vbNullChar 等价物是什么?

    C 中 Visual basic vbNullChar 的等价物是什么 我想在 C 中复制这个 VB 语句 Dim sVersion As String sVersion New String vbNullChar 255 我怀疑你想要 s
  • 为什么 C# 内联 if 结果与 if 不同?

    这是我的代码 object w 44 var k1 w is double Convert ToSingle w unchecked uint Convert ToInt64 w if w is double w 22 结果是k1 44 0
  • XIB 中用作自定义 UITableViewCell 的自定义按钮不响应点击 (ios7)

    因此 我在这里将工作的 ios 6 应用程序升级到 ios7 现在我无法在 uitableviewcells 内的自定义按钮 或其他子视图 上接收点击或其他操作 Edit My code 这是我部署 PlaceCell 的位置 UITabl
  • Java/Mysql 服务器程序中的电子邮件帐户密码存储

    我处于一个棘手的境地 我正在编写一个应用程序 使用我公司的电子邮件帐户向客户发送电子邮件 这里的问题是我必须拥有该帐户的密码才能使服务器上的邮件服务从该帐户发送电子邮件 我知道密码永远不应该以纯文本形式存储 尤其是用于重要电子邮件帐户的密码