文章目录
1、第一个#{}
解释:
- 使用#{}格式的语法在mybatis中使用preparement语句来安全的设置值
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,id);
举列子:
- 执行sql语句:
select * from user where name = #{username}
- 参数:username :xiaowang
- 解析后执行的sql语句:
select * from user where name = ?
#方式能够很大程度上防止sql注入
2、第二个${}
解释
- 有时你只想直接在SQL中插入一个不改变的字符串,$将传入的数据直接显示生成在sql中
Statament st =conn.createStatement();
ResultSet rs = st.executeSuery(sql);
举列子:
执行sql语句:select * from user where name = ${username}
参数:username= xiaoming
解析后执行的SQL语句:select * from user where name = xiaoming
sql注入的实际例子
select id from users where username = '"+username +"' and password = '"
这里的username和password从前台获取,假如未对传入的数据进行验证,用户输入的是or 1= 1
,执行的sql变成select id from users where username = '' or 1=1-- and password = '随便输入'
,由于1=1 是正确的,则直接不执行后边的验证。就离谱
3、区别
#方式能够很大程度防止sql注入,$无法防止sql注入
- $方式一般用于传入数据库对象
- 使用$要么不允许用户输入这些字段,要么进行转义并检验
- 能用#就不用$
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。