2017-01-16 124 views
3

我的Java代码出现问题。我在大学老师要我用“kiuwan”在线代码评估,他发现我的代码这个问题:[Java] [SQL]查询的硬编码用户名和密码

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

它发现我的3个querys这个问题:

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=?"; 

我怎样才能解决这个问题?我以这种方式制作了它们(从文本字段中获取信息)以进行登录并检查数据库。

感谢大家!

+0

其实你的老师并没有提到你的sql查询是如何构建的,他/她提到了你的连接凭证,很可能你已经使用了带有明确用户名和密码信息的硬编码数据库连接,这被称为坏习惯编码选择。像你这样的例子可以是http://stackoverflow.com/questions/11634379/username-password-etc-hardcoded-into-program-how-to-pick-them-up-from-a-file – Hayra

+0

选中此项: - http://stackoverflow.com/questions/12937641/handling-passwords-used-for-auth-in-source-code –

回答

4

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

一个简单的解决方案是从配置文件中读取数据库帐户的详细信息......但现在你有保持配置文件安全的问题。

(我为什么这样认为?因为你从你的老师讲引述有关从数据库从源代码或JAR文件中读取密码......不是文本。)


对于记录,这是一个坏主意存储在数据库中的密码。但这不是你的老师正在谈论的。

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

+0

“为密码创建种子加密哈希”+1 – Sid

+0

“引用文本”来自kiuwan (在线评估人员)不是我老师......反正我不知道如何解决它@Stephen C –

+0

@ClaudioCiociola - 1)你的老师(大概)赞同“kiuwan”告诉你的是什么。 2)由于你没有向我们展示代码的相关部分,我不明白我怎么能告诉你如何解决它。 (除了我已经说过的,即我的答案的第2段。) –