SQL中#和$的区别以及使用它们会造成的问题

不同点

●使用#获取传入的数据会在数据上加上引号。比如 where userId =
#{userId },如果userId传入的值为1,那最终的sql就是
where userId = “1”;

●使用$获取传入的数据不会对数据做任何改变,比如 where userId = #{userId },如果userId传入的值为1,那最终的sql就是
where userId = 1;

● #能够一定程度上防止SQL注入

● $无法防止SQL注入

● $一般用于传入数据库对象,例如传入表名。(仍会存在SQL注入问题)

使用SQL注入导致的问题

此处只举例sql注入产生的问题,至于是#导致还是$导致,自己深刻理解一下记忆会更深,这里就不过多阐述(可以实际操作一下)。
(1)基于 1=1 总为真
入参 userId ,实际传入的值 userId :100 or 1=1
sql:select * from Student where userId = 100 or 1=1;
只要传入100 or 1=1就可以查到所有学生用户信息,吐过包含敏感信息就会泄露。

(2)基于 “” = “” 总为真
入参 uesrName ,实际传入的值 userName : " or “” =";
sql: select * from user where userName = “” or “”="";
只要传入的最后结果为or “”=""(等号左右两边相等),那就任然可以查到所有数据。也会泄露。

(3)基于批量处理
入参 userId,实际参入的值userId:105;drop table user
select * from user where userId = 105; drop table user;
删除表user,很明显对数据库进行破坏,可能造成后台瘫痪。

若有写的不对的地方可以提出互相学习,哈哈

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值