nib*_*012 5 java security sql-injection
考虑一个假设的情况,我必须根据userId从数据库中检索一些细节,下面给出了示例代码
private String getpassword(String username) {
PreparedStatement statement = null;
ResultSet resultSet = null;
Connection conn = null;
final String selectQuery = "SELECT password FROM " + "users WHERE username=?";
try {
conn = dataSource.getConnection();
statement = conn.prepareStatement(selectQuery);
statement.setString(1, username);
resultSet = statement.executeQuery();
if (resultSet.next()) {
}
} catch (SQLException e) {
// log it
}
//return
}
Run Code Online (Sandbox Code Playgroud)
此用户名实际上来自客户端,用户可以篡改数据(如果他愿意).因此,preparedStatements将阻止接受引号并仅将过滤后的SQL形式发送到数据库.
例如:我可以提供username ='或1 = 1,它将是一个有效的SQL语句.但是如果驱动程序从用户输入中删除引号,那么它们将阻止sql注入.
对此一般的理解是什么?
| 归档时间: |
|
| 查看次数: |
1697 次 |
| 最近记录: |