java - 在java中避免SQL注入(inject)

标签 java sql jdbc sql-injection

我是 JavaEE 的新手,正在尝试通过检查数据库来学习制作一个简单的登录页面。这是代码示例:

ResultSet result=null;
Statement s = (Statement) con.createStatement();
result=s.executeQuery("select username from Table where ID="+id and " password="+password);

它应该容易受到 SQL 注入(inject)攻击吧?我将通过在 ASP.NET 中使用参数化查询来完成此操作,如下所示:

SqlConnection con = new SqlConnection();
SqlCommand cmd=new SqlCommand("select username from Table where ID=@id and password=@password",con);    
cmd.Parameters.AddWithValue("@id", id); 
cmd.Parameters.AddWithValue("@password", password);  

有没有办法像这样在 Java 中使用参数化查询?任何人都可以使用参数化形式的查询来避免 SQL 注入(inject)吗?

最佳答案

是的,您可以使用PreparedStatement 来做到这一点;例如:

PreparedStatement preparedStatement = con.PreparedStatement(
        "SELECT * FROM MY_TABLE WHERE condition1 = ? AND condition2 = ?");
preparedStatement.setString(1,condition1_value);
preparedStatement.setString(2,condition2_value);
ResultSet rs = preparedStatement.executeQuery();

关于java - 在java中避免SQL注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17391720/

相关文章:

mysql - 我怎样才能处理这个一对多的关系,这个约束在一个 note ON 字段上?

java - 如何通过JDBC连接两个数据库?是否可以?

android - android studio 中的搜索查询无法正常工作

java - 带有一维数组的 Java 中的 N 皇后拼图

java - 奇怪的 FileInputStream/Data FileInputStream 行为 : seek()ing to odd positions

php - Mysql查询没有返回正确的结果

sql - 在 SQL Server 2005 中使用 SSIS 从平面文件导入时如何保留 NULL 值

java - 来自另一个类中的对象的引用变量

java - 使用 Buffered Reader 读取输入的语句未执行

java - JDBC - 无法与本地主机连接