SQL 注入
SQL 注入
passionfly 发表于3年前
SQL 注入
  • 发表于 3年前
  • 阅读 14
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

例如:String sql="select * from usert where name='"+usernameInput+"' and password='"+pwdinput+"'";
这句是判断当uesrname和password条件都成立时,才会显示结果。
就是用如下的字符串拼接而成

String sql="select * from usert where username='"
+usernameInput
+"' and password='"
+pwdinput

+"'";

在输入用户名hh,密码输入下面的代码,
pwd' or '1'='1
在数据库报务器相当于执行这样的SQL语句:
select * from usert where name='hh' and password='pwd' or '1'='1' ; --这个语句不管前面的条件是否成立,后面的语句总是为真,因此where 条件语句总是成立。
所以就可以跳过前面用户名和密码的判段。
这样就不安全
       //正常的SQL查询语句    
      String sql="select * from usert where name='"+userinput+"' and password='"+pwdinput+"'";
      //userinput用户输入的字符串
      String userinput="hh";
      //pwdinput接收用户输入的字符串
      String pwdinput="pwd' or '1'='1";
这种不安全的情况是在SQL语句在拼接的情况下发生

 

这了主防范这这样”SQL注入安全“可以用预编译解决:

String sql= "insert into userlogin values(?,?)";
  try {
   PreparedStatement ps=conn.prepareStatement(sql);
    for(int i=1;i<100;i++){
    ps.setInt(1, i);
    ps.setInt(2, 8888);
    ps.executeUpdate();
   }
   ps.close();
   conn.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }

这样,不管用户输入是什么,数据库服务器总认为是一个值,而SQL语句是相同的不会重复编译,也不会编译新的SQL语句,所以不管用户怎么输入,都不会产生"SQL注入安全"

















共有 人打赏支持
粉丝 14
博文 106
码字总数 76465
×
passionfly
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: