JDBC(PreparedStatement,sql注入)

sql注入

SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。简单的说就是由于没有对用户输入进行充分检查,而SQL又是拼接而成,在用户输入参数时,在参数中添加一些SQL 关键字,达到改变SQL运行结果的目的,也可以完成恶意攻击。

假设我的数据库中存在以下数据:

username password
 张三       123

当我在登陆页面 进行登陆的时候去查询数据库执行以下操作:

select *from test where username=张三 and password=123;

当密码错误的时候我们是不能登陆的。查询为null但是如果 在输入用户名时 tom’ or ‘1’=’1这时就不会验证密码了。

select *from test where username=张三 or 1=1 and password=13;

这样不需要验证密码即可登陆 。

PrepareStatement

PreparedStatement statement = con.prepareStatement("select * from test where username=? and password= ? ");
        statement.setString(1,"张三");
        statement.setString(2,"123");
        ResultSet resultSet = statement.executeQuery();

         while(resultSet.next()){
             int id = resultSet.getInt(1);
             String name = resultSet.getString(2);
             String password = resultSet.getString(3);
             System.out.println(id+".."+name+".."+password);

         }

他会预编译sql语句 使用占位符? 再传入数据就不会将用户的输入作为关键字而是都作为字符串这样避免动态拼装sql 发生sql注入 。

经验分享 程序员 微信小程序 职场和发展