原创:小姐姐味道(微信群众号ID:xjjdog),欢迎分享,转载请保存出处。
很长一段时间,我以为后端开发,在安全性方面最简单出问题的当地就在于SQL注入。通过 where 1=1docker指令
这种魔幻的SQL写法,就能够很简单的对一个存在问题的程序员是做什么的体系进行进犯,以至于终究演进出sqlmap
这样的神器存在。
后来的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注入仍然有搞头。
但更简单产生问题的,仍是LIKE
和IN
等相似的句子。
下面程序员那么心爱是两句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,欢迎增加老友,进一步沟通。