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注入 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值