使用属性文件是一个安全的选择吗?

Posted

技术标签:

【中文标题】使用属性文件是一个安全的选择吗?【英文标题】:Is using a property files a safe option? 【发布时间】:2014-07-27 08:58:23 【问题描述】:

我需要使用属性文件来保存一些不应该向任何人透露的重要信息。

我的问题是:关于安全问题,使用属性文件是否安全?

【问题讨论】:

欢迎来到 SO!请在继续之前阅读本主题:***.com/help/how-to-ask :) 只有在文件不被任何人读取时才是安全的。 我如何确保在部署我的项目后它不被任何人阅读?通常我会在我的项目中为它创建一个 javaresource 文件夹。 如果一个文件不能被任何人读取,那么它就不能被你的程序读取,因此它没有用。 您可以对属性文件jasypt.org/encrypting-configuration.html和wiki.jasig.org/display/CASUM/…中的敏感数据进行加密 【参考方案1】:

这取决于更大的背景(整个解决方案的安全策略)以及您想要保护的数据的性质。

在大多数环境中,安全网络是通过使用防火墙等构建的,并且在内部,即使是敏感信息(如 API 密钥)也以纯文本形式存储在属性文件等中。有更复杂的解决方案可以对这些信息进行加密,但需要大量设置。

有些人建议在源中嵌入加密密钥来加密属性文件,然后对源进行混淆以隐藏加密密钥,但这是通过模糊来实现的安全性,应该避免。

如果您要存储密码信息以验证用户等,那么您应该存储密码的加盐哈希。

编辑: 可能最好的方法之一是加密属性文件并让操作员在每次应用程序时键入加密密钥。开始(以避免将加密密钥存储在持久存储中)。但是请注意,攻击者仍然可以读取进程内存以获取解密值。 这就是为什么大多数解决方案都专注于保护网络,而不是保护已经可以访问服务器的攻击者。

【讨论】:

我没有在其中搜索密码信息,但仍然是它的关键信息【参考方案2】:

你至少有两个选择:

    从仅在部署服务器的操作系统中配置的系统属性中读取属性值 通过查找 JNDI 名称读取属性值,因此您的属性值在应用服务器中配置

通过上述每种方法,可以解决安全问题,重点关注部署环境,而不是关注应用程序源或二进制文件。

【讨论】:

你能告诉我更多关于你的第一种方法的细节吗? @user3713995 设置一个environment variable 而不是read it 环境变量会创建环境依赖.. 不是一个好习惯 @user3713995 一般来说我同意你的观点,但在这种情况下你需要环境依赖,因为你希望你的服务器环境成为关注安全工作的地方。您可以采用约定优于配置原则来减少环境耦合:约定(System.getenv,如果找不到属性,则从 JNDI 名称中获取)配置(无论您喜欢什么)。【参考方案3】:

回问。有两个选项:应用程序内部的配置和应用程序外部的 Java EE 服务器配置。我认为他们的意思是在应用程序之外拥有属性文件。你应该问这个。

将它放在应用程序之外还允许在不同的环境中部署应用程序。而且更安全,因为即使是开发人员也不需要将生产密码存储在某个地方。

如何访问文件取决于服务器。

【讨论】:

以上是关于使用属性文件是一个安全的选择吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何查看共享文件夹操作记录

如果您不期望重复的结果,欧洲央行是一个安全的选择吗?

Spring配置文件可以选择@PropertySources吗?

C盘访问被拒绝?

锁定关键文件,增强Linux安全性

windows怎么删除nodejs