SQL漏洞注入攻击


SQL漏洞注入攻击
使用statement进行sql处理存在安全隐患eg:
String sql = "select * from users where username='"+name+"' and password='"+password+"'";
stmt = conn.createStatement();
stmt.executeQuery(sql); 
第一次登录:
请输入用户名: 赵本山
请输入密码: admin
登录成功

第二次登录: 
请输入用户名: 赵本山
请输入密码: admin'or'1'='1
登录成功

SQL漏洞注入攻击:
原因: 
  1. 程序员在执行sql拼接的时候,直接把内容拼到SQL语句中.
  2. 在执行的时候,正好被拼接成一条恒成立的语句,形成了一个漏洞. 
解决办法: 
  1. 不能把语句参数直接写在SQL中. 
  2. 使用参数化查询. 
使用preparedstatement处理sql
String sql = "select * from users where username=? and password=?";
ps = conn.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
rs = ps.executeQuery();
第一次登录:
请输入用户名: 赵本山
请输入密码: admin
登录成功

第二次登录: 
请输入用户名: 赵本山
请输入密码: admin'or'1'='1
登录失败

说明: 
PreparedStatement接口(预编译的SQL语句)优点: 
  1. 有很高的代码可读性以及维护性. 
  2. 很大程度提高了SQL语句执行的性能. 
  3. 安全性能高,不容易遭到破解. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值