SQL注入

1. 字符串拼接

💡JDBC中的SQL语句本质上是一个String字符串。可以通过把参数和SQL进行String拼接。

语法:

String sql = "insert into t_person values(null,'"+arg1+"',"+arg2+",'"+arg3+"','"+arg4+"','"+arg5+"')";
String sql = "select * from t_person where id = "+id变量;

示例

# 参数
String name = "宇希";
String sex = "男";
int age = 28;
String mobile = "15533368877";
String address = "北京";
​
# 绑定
String sql = "insert into t_person values(null,'"+name+"',"+age+",'"+sex+"','"+mobile+"','"+address+"')";
2. 占位符

💡使用**?标记动态参数在SQL中位置,然后使用编码,动态将参数绑定到?站位**的位置。

语法:

① SQL中使用?标记站位

注意:?站位只能表示数据,其他(sql关键词、表名、字段名等)都不能使用?站位。

insert into t_person values(null,?,?,?,?,?);

② 动态绑定参数

注意,参数绑定的参数位置和顺序必须和?站位保持一致。

1. 增删改DML的方法参数绑定
update(String sql, @Nullable Object... args);
​
2. DQL查询语句的方法参数绑定
query(String sql, RowMapper<T> rowMapper, @Nullable Object... args);
​

示例:

# 1. 参数
String name = "宇希";
String sex = "男";
int age = 28;
String mobile = "";
String address = "";
​
# 2. SQL并使用?站位
String sql = "insert into t_person values(null,?,?,?,?,?)";
​
# 3. 动态参数绑定并发送SQL
jdbcTemplate.update(String sql,[BeanPropertyRowMapper对象,] name,age,sex,mobile,address);
​
SQL注入

💡通过输入特殊的参数拼接SQL语句,进而破坏原有的SQL语句的含义,然后非法获取数据库数据或者进行非法数据库操作,是一种常见的web安全漏洞。

场景:用户通过输入username和password,判断是否能够登录成功。

SQL注入参数:

String adminName = "xiaohei'-- ";//真实用户名后添加'-- ,后面的内容会被注释掉
String adminPassword = "1234567";//密码错误,但也能登录成功
  • 字符串拼接

  • ?站位

  • 结论

    ?站位方式可以防止SQL注入问题。

4. 总结
字符串拼接?站位
相同动态拼接sql中的数据参数动态拼接SQL中的数据参数
不同可以绑定非数据的参数:表名、字段名、SQL关键字只能绑定数据,不能绑定其他SQL关键词和表名字段名
有SQL注入风险可以防止SQL注入。
建议场景适用于拼接表名、字段名、SQL关键词适用于拼接数据参数
  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这孩子叫逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值