[英]JAVA - Possible SQL Injection
所以我有以下代码片段:
String username = props.getProperty("jdbc.username");
try {
String username = parts[1];
// Check procedure
System.out.println("Checking user");
// Check database user table for username
conn = getSQLConnection();
Statement stat = conn.createStatement();
ResultSet user = stat.executeQuery( "SELECT * FROM USER WHERE log_id='" + username + "';" );
// Check given password against user entry
if(user.next()){
System.out.println("User Exists: " + username);
sendMessage("true");
return;
}
else{
System.out.println("User Does Not Exist: " + username);
sendMessage("false user");
return;
}
出于教育目的,即使我知道输入来自何处,该SQL语句是否也免受SQL注入的影响?
ResultSet user = stat.executeQuery( "SELECT * FROM USER WHERE log_id='" + username + "';" );
这受SQL注入的约束。
想象一下,如果username
具有以下值会发生什么:
John'; delete from user where 'a' = 'a
是的,因为*大量的Java JDBC SQL教程都弄错了。 基本上,始终使用PreparedStatement
。
不仅因为这样可以确保即使用username
具有上述恶意值也可以安全使用,而且更重要的是,因为RDBMS引擎可以将同一查询重用于所有进一步的调用。
简而言之,根本没有理由不使用它们。 演示使用字符串连接的SQL的教程应该死于痛苦的SQL注入死亡。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.