Problemas de seguridad de inyección JDBC-sql

Problemas de seguridad de la inyección SQL

Cuando se usa la clase Sentencia para ejecutar objetos sql, las sentencias sql empalmadas pueden tener subparticipantes de claves especiales en el empalme de cadenas, lo que causa problemas como la fuga de información de la base de datos.

Utilice el formato de instrucción SQL de la clase de instrucción:

String sql = "select *from admin where name = '"+username+"' and password = '"+password+"'";

Al encontrar la declaración de inyección sql:

请输入用户名:
abcdefg
请输入密码:
s' or 'a' = 'a
select * from user where username = 'abcdefg' and password = 's' or 'a' = 'a'
登录成功!

¡Puede ver que la instrucción sql se ejecuta correctamente independientemente del nombre de usuario y la contraseña, el inicio de sesión es exitoso y se obtiene toda la información del usuario!

Solución

Para evitar la inyección maliciosa de SQL, es necesario usar la clase PreparedStatement:

String sql = "select *from admin where aname = ? and apassword = ?";

La declaración de ejecución es:

pstmt = conn.prepareStatement(sql);

La declaración de asignación es:

pstmt.setString(1,username);
pstmt.setString(2,password);

El resultado de la ejecución es:

请输入用户名:
abcdefg
请输入密码:
s' or 'a' = 'a
登录失败,用户名或密码错误!

Se evitó con éxito la inyección de sql.

Publicado 28 artículos originales · elogiado 0 · visitas 722

Supongo que te gusta

Origin blog.csdn.net/William_GJIN/article/details/104702060
Recomendado
Clasificación