【问题标题】:[Java][SQL] Hardcoded username and password on query[Java][SQL] 查询时硬编码的用户名和密码
【发布时间】:2017-01-16 10:36:54
【问题描述】:

我的 java 代码有问题。我的大学老师让我使用“kiuwan”作为在线代码评估器,他在我的代码中发现了这个问题:

任何阅读源代码的人都可以看到硬编码的凭据(用户名/密码)。 如果受此类硬编码凭据保护的资源很重要,则可能会危及系统安全。 使用硬编码的凭据,更改很困难。如果目标帐户被盗用,并且软件 在生产中部署时,需要更改代码,这会强制重新部署。 请注意,并非总是需要访问源代码:如果攻击者可以访问 JAR 文件, 他/她可以拆卸它以恢复明文密码。

它在我的 3 个查询中发现了这个问题:

public static final String CHECK_USER = "SELECT nome FROM utenti WHERE nome=? AND password=?";
public static final String INSERT_USER = "INSERT INTO utenti (nome, password) VALUES (?, ?)";
public static final String CHECK_USER_NAME = "SELECT nome FROM utenti WHERE nome=?";

我该如何解决?我以这种方式制作它们(从文本字段中获取信息)以进行登录并检查数据库。

谢谢大家!

【问题讨论】:

标签: java sql hardcoded


【解决方案1】:

我不认为你的老师在谈论这些问题。我认为他/她正在谈论您的代码如何创建其数据库连接。他/她发现您已将数据库帐户的用户名和密码硬连线到您的 Java 代码中。

对此的一个简单解决方案是从配置文件中读取数据库帐户详细信息......尽管现在您遇到了保持配置文件安全的问题。

(我为什么这么认为?因为你从老师那里引用的文字谈到从源代码或 JAR 文件中读取密码......而不是从数据库中。)


为了记录,在数据库中存储密码也是一个坏主意。但这不是你的老师所说的。

避免在数据库中存储密码的技术更加困难。一个典型的解决方案是为密码创建一个种子加密哈希,并将 that 存储在数据库中。但这意味着您无法恢复原始密码。如果您需要这样做,那么从安全角度来看,事情会变得更加“棘手”。

【讨论】:

  • "为密码创建种子加密哈希" +1
  • “引用文本”来自 kiuwan(在线评估员)而不是来自我的老师......反正我不知道如何解决它@Stephen C
  • @ClaudioCiociola - 1) 你的老师(大概)赞同“kiuwan”告诉你的内容。 2)由于您没有向我们展示代码的相关部分,我不知道如何告诉您如何修复它。 (除了我已经说过的;即我回答的第 2 段。)
  • @ClaudioCiociola - 3) 你写了“我的大学老师让我使用“kiuwan”作为在线代码评估器,在我的代码中发现了这个问题: " 在英语中,您不会将网站称为“他”或“她”。它是一个“它”。所以你句子中的“他”是指你的老师! (只是指出沟通不畅的原因......)
猜你喜欢
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 2015-11-19
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
相关资源
最近更新 更多