2021年,SQL注入死透了么?

2021年,SQL注入死透了么?

原创:小姐姐味道(微信群众号ID:xjjdog),欢迎分享,转载请保存出处。

很长一段时间,我以为后端开发,在安全性方面最简单出问题的当地就在于SQL注入。通过 where 1=1docker指令这种魔幻的SQL写法,就能够很简单的对一个存在问题的程序员是做什么的体系进行进犯,以至于终究演进出sqlmap这样的神器存在。

2021年,SQL注入死透了么?

后来的fastjson改写了我的认知,这个结构也算是对互联网安全概念的一种推动。连不明白技能的老板,都知道fastjson快的要命,作为程序员安全理念就得到了一次提高。

为什么对sql注入情有独钟?由于开发人员和SQL打交道的当地太多了。乃至有的专门开发报表的同学,写的SQL行数,比写的代码行数安全还多!

问题是。很久很久之前,早在10年前,就有人在喊SQL注入现已死掉了,但时至今日,仍然有一大批的SQL注入教程和测验工程师SQL注入的事例。

SQL注入是漏洞之王,这可不是吹的。

开源一套以教育为目的体系,欢迎star:github.程序员工资一般多少com/xjjdog/bc测验抑郁症ma…。它包括ToB杂乱事务、互联网高并发事务、缓存使用;DDD、微服务教训。模型驱动、数据驱动。了docker和虚拟机的差异解大型服务进化路途,编码技巧、学习Linux,功能调优。Docker/k8s助力、监控、日程序员计算器志收集、中间件学习。前端技能、后端实践等。首要技能:SpringBoot+JPA+Mybatis-plus+Antd+Vue3

当然在这方面,PHP的贡献最大,Java甘拜下风。

SQL注入盛行的原安全因,就是开发人员对自己太自傲了,或许运用的工具太原始了,没有通过结构层进行一次过滤。如果你用了Java界的MyBatis测验你的自卑程度或许JPA,产生SQL注入的可能性就变的程序员十分的低。现在PHP也有了相似于thinkphp相同的结构,代表着能搞的SQL注入漏洞现已越来越少了。测验你的自卑程度

但不代表着没有,只是门槛提高了。咱程序员需求什么学历们以MyBatis为例,看一下终究还能不能产生SQL注入。

MyBatis仍然存在SQL注入

运用Mybatis的同学,榜首个接触的概念,就是#安全出产法$的差异。这两个符号十分的像Shell中的魔幻符号,测验工程师但好在只要两种状况。

  • # 代表的是运用sql预编译方法,安全可靠
  • $ 代表着运用的是拼接方法,有SQL注入的危险

比方下面这个xml装备,就是一个肯定安全的写法。由于整个测验抑郁症#{id}会被替换成?

<select id="queryAll"  r程序员那么心爱esultMap="resultMap">
SELECT * FROM order WHERE id = #{id}
</select>

但惋惜的是,有些场景,并不能运用预编译方法(或许你只是是不知道或许懒)。像一些代码重构,把表名/列dockerfile名/排序等字段,动态传入的时分,不可避免的就需求SQL拼接的方法,SQL注入仍然有搞头。

但更简单产生问题的,仍是LIKEIN等相似的句子。

下面程序员那么心爱是两句Like迷糊查询的写法,实践测验会发现,运用#居然不好使了,会报错,需求运用sq安全出产法l拼接的$。问题由此产生。

SELECT * FROM order WHERE name like '%#{name}%'  //会报语法错
SELECT程序员 * FROM order WHERE name like '%${name}%'  //能够工作

而正确的写法,应该运用函数拼接。可是工期压死人,在不知不觉间,大多数人就选择了简略的写法。终究功用榜首嘛,也是体现工作量的最首要方法。Java

SELECT * FROM order WHERE  name like concat(‘%’,#{name}, ‘%’) //正确的写法

相同的问题,存在于IN句子。

in (#{tag}) //报错
i程序员那么心爱n (${tag}) //能够工作

已然几个字符就能够工作,当然没人选择下面docker是干什么的杂乱的写法。

tag in
<foreach collection="ta安全教育平台g" item="item" open="("separatosr="," close=")">
#{tag}
</foreach>

还有order by,也千万不要漫不经心,程序员那么心爱一不小心就会万劫不复。

SELECT * FROM order order by createJavaDate #{sortType} //报错
SELECT * FROM order order by createDate ${sortType} //正常

这种状况下,就需求把sor程序员是学什么专业t程序员客栈Type搞安全成白程序员是做什么的名单了。不就一个ASC和DESC了,你给我传一个长长的串,是怎么回事?

总结

SQL测验纸怎么看是否怀孕注入在2021年,仍然存在,只不过门槛提java模拟器高了。现在SQL注入减少,都是结构的功劳,和程序员的水平没半毛联系。sql拼接的状况永久安全不会消失,由于这是最方便简略的方法,会让人骑虎难下。许多的外包项目,十几年躺尸不动的体系比比皆是,寄希望于在结构层全部消除SQL注入,是一个希望。

由于它的对手,是人道的懒散。谁也无法打败它。

开源一套以教育为目的体系,欢迎star:github.com/xjjdog/bcjava根底知识点ma…。它包括ToB杂乱事务、互联网高并发事务、缓存使用;DDD、微服务教训。模型驱动、数据驱动。了程序员客栈解大型服务进化路途,编码技巧、学习Linux,功能调优。Docker/k8s助力、监控、日志收集、中间件学习。前端技能、后端实践等。首要技能:SpringBoot+JPA+Myba程序员怎么学tis-plus+A安全期ntd+V测验抑郁症ue3

作者简介:小姐姐味道 (xjjdog),程序员需求什么学历一个不允许程序员走弯路的群众号。聚集根底架构和Linu程序员是学什么专业x。十年架构,日百亿流量,与你评论高并发国际,给你不相同的味道。我的个人微信xjjdog0,欢迎增加老友,​进一步沟通。​

评论

发表回复