声纳“凭据不应被硬编码”错误

Posted

技术标签:

【中文标题】声纳“凭据不应被硬编码”错误【英文标题】:Sonar "Credentials should not be hard-coded" Error 【发布时间】:2017-03-03 19:02:05 【问题描述】:

在我的应用程序中,我有一个 ApplicationConstants.java 类,用于为应用程序中使用的字符串常量服务。 我有public static final String PASSWORD = "password" 作为常量之一。声纳为此引发错误,如下所示。请让我知道是否有办法处理。

声纳错误:描述受让人资源新问题凭证 不应硬编码:删除此硬编码 密码。 EnrollmentConstant.java false

【问题讨论】:

【参考方案1】:

您应该将密码移至配置。

【讨论】:

【参考方案2】:

您应该将其解压缩到属性文件中。 Here你可以阅读如何做到这一点

您也可以将它作为系统属性放在应用程序服务器上,并期望它出现在生产机器(例如 Wildfly 服务器)上,然后使用System.getProperty(key) 读取它。这会使部署有点复杂,但项目中不会出现生产密码。

如果您使用 Spring,您可以使用 @Value 注释将值加载到 bean。 Here 你可以阅读如何做到这一点。

【讨论】:

【参考方案3】:

您需要将凭据存储在代码之外的加密配置文件或数据库中。在 Soanr 端,他们有硬编码密码/用户名的标志。所以将其保存在属性文件或其他配置文件中。它也不是出于安全原因,建议将密码保存在 String 对象中,因为很容易从已编译的应用程序中提取字符串。

【讨论】:

【参考方案4】:

对我来说,不这样做的主要原因是这种情况:密码更改。现在您必须更改代码、重新编译和重新部署。如果您将它放在配置文件中(或其他一些不直接在代码中使用的方式),则不必做所有这些。最坏的情况是你必须退回服务器。最佳情况 - 您的代码可以判断配置文件何时更改并即时获取更改。

【讨论】:

以上是关于声纳“凭据不应被硬编码”错误的主要内容,如果未能解决你的问题,请参考以下文章

java硬编码数据校验

如何读取具有动态名称的文件,同时避免在 R 中进行硬编码?

当我使用日期类型变量而不是硬编码日期时,为啥会出现“操作数类型冲突:日期与 int 不兼容”错误?

即使我对特定位置进行硬编码,角色也会移动到错误的位置

避免硬编码 Hibernate 属性

当我尝试插入由列表理解生成的元组列表时,executemany 抛出错误;如果它是硬编码的,则相同的列表有效