SQL注入——以最最基本的身份验证为例
我们一般用如下SQL来进行身份验证
SELECT username FROM 对应用户表
WHERE username LIKE 输入的用户名 AND password LIKE 输入的密码
一般情况下,用户名与密码不匹配时无法通过滴
氮素,当恶意用户,利用sql注入的手段。。。。。不光可以通过验证,甚至还可以给你删库跑路走人
例如
恶意用户在 username处填写——我是恶意用户
在密码处填写——1’ and password = ‘1’ or ‘1’=’1
那么恶意用户就能绕开验证
数据库结构
演示代码:
import java.sql.*;
import java.util.Scanner;
/**
* sql注入实例
*
*/
public class SqlTest
{
public static void main(String[] args)
{
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/gaysys","root","123456");
Scanner scanner=new Scanner(System.in);
System.out.println("请输入用户名");
String userName= scanner.nextLine();
System.out.println("请输入密码");
String password= scanner.nextLine();
//1' and password = '1' or '1'='1
String sql = "SELECT id FROM admin WHERE id LIKE '"
+userName+"' AND password LIKE '"+password+"'";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
if (resultSet.next())
{
System.out.println("通过验证");
}else
{
System.out.println("未通过验证");
}
} catch (ClassNotFoundException e)
{
e.printStackTrace();
} catch (SQLException e)
{
e.printStackTrace();
}
}
}
正常登陆时
恶意用户登录时
此时,恶意用户通过sql注入绕过了验证
而通过 PreparedStatement 能有效防止这种情况
虽然不是安全专业,但是知道基本的一些信息安全知识对写代码也是有好处的