And*_*cci 2 java sql sql-injection jdbc secure-coding
所以我有这段代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
出于教育目的,即使我知道输入来自哪里,SQL语句是否受SQL注入保护?
ResultSet user = stat.executeQuery( "SELECT * FROM USER WHERE log_id='" + username + "';" );
Run Code Online (Sandbox Code Playgroud)
这是受SQL注入的.
想象一下如果username有这个值会发生什么:
John'; delete from user where 'a' = 'a
Run Code Online (Sandbox Code Playgroud)
是的,因为*Java JDBC SQL教程的加载错误.基本上,总是使用PreparedStatements.
不仅因为这使得即使username具有如上所述的恶意值也可以安全使用,而且更重要的是,因为RDBMS引擎可以为所有进一步的调用重用相同的查询.
简而言之,没有理由不使用它们.使用字符串连接演示SQL的教程应该会导致痛苦的SQL注入死亡.
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |