时间:2021-07-01 10:21:17 帮助过:17人阅读
public class Login {
public boolean login(String card,String password){
boolean rtn= false;
try {
//1、加载驱动:加载数据库提供的驱动类
Class.forName("oracle.jdbc.driver.OracleDriver");
//2、获取数据库连接,通过java的驱动管理器
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl ",
"test01", "131281huazioo");
//3、获得操作数据库的声明
Statement st=conn.createStatement();
//sql语句
String sql= "select * from bankcard where card=‘"+card+"‘and password=‘"+password+"‘";
//执行sql语句
ResultSet rs=st.executeQuery(sql);
rtn=rs.next();
rs.close();
st.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
return rtn;
}
}
以上代码会出现SQL注入
如:
public class Testlogin {
@Test
public void test() {
Login a=new Login();
if(a.login("123123123‘ or 1=‘1", "12312312313‘ or 1=‘1")){ //无论输入什么数据只要加or 1=1就可以成功
System.out.println("成功!");
}
}
}
or 1=1 加到where条件后保证了条件永远为真,相当于没加条件。
原SQL语句改为:select * from bankcard where card=‘123132‘ or 1=1; public void test() {
Login a=new Login();
if(a.login("108‘--", "12312312313")){
System.out.println("成功!");
}
}
加入--将后面的条件注释掉,在Oracle中--表示注释,这样就可以使账号满足的条件下,使密码失效。
SQL注入
标签:word 成功 exe jdbc stl cut except str system