数据库相关

1.oracle数据库使用PLSQL软件时,自己加入数据后需要commit,数据才会执行insert语句。

 

2.SQL注入

sql注入的原因,表面上说是因为 拼接字符串,构成sql语句,没有使用 sql语句预编译,绑定变量。

但是更深层次的原因是,将用户输入的字符串,当成了 “sql语句” 来执行。

比如String queryString = "from User t where t.username= " + usernameString + " and t.password="+passwordString;

我们希望用户输入的 username和password 的值,仅仅作为一个字符串字面值,传入数据库执行。

但是当password输入了:123 or 1=1 时,其中的 or 1=1 并没有作为 where id= 的字面值,而是作为了 sql语句 来执行的。所以其本质是将用户的输入的数据,作为了命令来执行。

 

解决办法:sql语句预编译和绑定变量,是防御sql注入的最佳方法。为了防止SQL注入,避免使用拼凑SQL语句的方式!!

使用hibernate或mybatis时,一般默认会进行预编译。

对mybatis来说, #{name}形式的,那么就是sql预编译,使用 ${name} 就不是sql预编译的

参数绑定有2种办法:使用positional parameter(查询字符串中使用?)或者named parameter(查询字符串中使用:)。

例如:

//hql语句
String queryString = "from User t where t.username :usernameString and t.password : passwordString";
//执行查询
List result = session.createQuery(queryString)
                      .setString("usernameString ", usernameString )
                      .setString("passwordString", passwordString)
                      .list();            

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值