gpt4 book ai didi

java - 为什么以下 sql 语句不适用于 JDBC?

转载 作者:行者123 更新时间:2023-12-01 07:06:14 25 4
gpt4 key购买 nike

我正在用java编写一个基本的数据库管理系统。当用户提交用户名和密码时,程序会在数据库中搜索提交的数据是否正确:

    result = stat.executeUpdate("SELECT username,password FROM DB" + "WHERE (username = '"+loginusr.getText()+"',password = '"+loginpwd.getText()+"')");

显然 = 符号附近有一个错误。有人可以帮忙解决这个问题吗?

提前致谢

最佳答案

有几个问题。

首先,您需要在 WHERE 之前有一个空格:

result = stat.executeUpdate("SELECT username,password FROM DB" + "WHERE (username = '"+loginusr.getText()+"',password = '"+loginpwd.getText()+"')");
// Here ---------------------------------------------------------^

但更根本的问题是,您将该代码完全开放给 SQL injection攻击和失败。使用PreparedStatement ,不要连接字符串来放入参数。以下是原因的一个很好的说明:

enter image description here

来自:http://xkcd.com/327/

最后:将密码存储在数据库中并不是最佳实践。相反,通常您存储密码的加密哈希,而不是密码本身(例如 SHA-256 是一种哈希技术)。然后,当用户进行身份验证时,您对他们提供给您的密码进行哈希处理,并将其与您存储的哈希值进行比较。这样,就无法从数据库中检索到密码。

关于java - 为什么以下 sql 语句不适用于 JDBC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23263180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com