千家信息网

怎么确定SQL注入死透了

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,小编给大家分享一下怎么确定SQL注入死透了,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!很长一段时间,我认为后端开发,在安
千家信息网最后更新 2025年02月05日怎么确定SQL注入死透了

小编给大家分享一下怎么确定SQL注入死透了,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

很长一段时间,我认为后端开发,在安全性方面最容易出问题的地方就在于SQL注入。通过 where 1=1这种魔幻的SQL写法,就可以很容易的对一个存在问题的系统进行攻击,以至于最终演进出sqlmap这样的神器存在。

后来的fastjson刷新了我的认知,这个框架也算是对互联网安全概念的一种推动。连不懂技术的老板,都知道fastjson快的要命,作为程序员安全理念就得到了一次提升。

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

问题是。很久很久之前,早在10年前,就有人在喊SQL注入已经死掉了,但时至今日,依然有一大批的SQL注入教程和SQL注入的案例。

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

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

SQL注入流行的原因,就是开发人员对自己太自信了,或者使用的工具太原始了,没有经过框架层进行一次过滤。如果你用了Java界的MyBatis或者JPA,发生SQL注入的可能性就变的非常的低。现在PHP也有了类似于thinkphp一样的框架,代表着能搞的SQL注入漏洞已经越来越少了。

但不代表着没有,只是门槛提高了。我们以MyBatis为例,看一下到底还能不能发生SQL注入。

MyBatis依然存在SQL注入

使用Mybatis的同学,第一个接触的概念,就是#$的区别。这两个符号非常的像Shell中的魔幻符号,但好在只有两种情况。

  • # 代表的是使用sql预编译方式,安全可靠

  • $ 代表着使用的是拼接方式,有SQL注入的风险

比如下面这个xml配置,就是一个绝对安全的写法。因为整个#{id}会被替换成?

但可惜的是,有些场景,并不能使用预编译方式(或者你仅仅是不知道或者懒)。像一些代码重构,把表名/列名/排序等字段,动态传入的时候,不可避免的就需要SQL拼接的方式,SQL注入依然有搞头。

但更容易发生问题的,还是LIKEIN等类似的语句。

下面是两句Like模糊查询的写法,实际测试会发现,使用#竟然不好使了,会报错,需要使用sql拼接的$。问题由此发生。

SELECT * FROM order WHERE name like '%#{name}%'  //会报语法错SELECT * FROM order WHERE name like '%${name}%'  //可以运行

而正确的写法,应该使用函数拼接。但是工期压死人,在不知不觉间,大多数人就选择了简单的写法。毕竟功能第一嘛,也是体现工作量的最主要方式。

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

同样的问题,存在于IN语句。

in (#{tag}) //报错in (${tag}) //可以运行

既然几个字符就可以运行,当然没人选择下面复杂的写法。

tag in#{tag} 

还有order by,也千万不要掉以轻心,一不小心就会万劫不复。

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

这种情况下,就需要把sortType搞成白名单了。不就一个ASC和DESC了,你给我传一个长长的串,是怎么回事?

总结

SQL注入在2021年,依然存在,只不过门槛提高了。现在SQL注入减少,都是框架的功劳,和程序员的水平没半毛关系。sql拼接的情况永远不会消失,因为这是最快捷简单的方式,会让人欲罢不能。无数的外包项目,十几年躺尸不动的系统比比皆是,寄希望于在框架层全部消灭SQL注入,是一个梦想。

因为它的对手,是人性的懒惰。谁也无法战胜它。

以上是"怎么确定SQL注入死透了"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

写法 方式 问题 安全 框架 代表 开发 就是 情况 篇文章 运行 人员 代码 内容 同学 地方 概念 漏洞 程序 程序员 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 熟悉数据库环境 命令 北京安防时间频率同步服务器 调试笔记本网络安全 辽宁运营网络安全工程包括什么 云服务器断网运行软件 长江网络安全检查内容 下列属于数据库管理的软件是 我的世界服务器跑酷第一关 我的世界服务器地基方块怎么拿 一般网络安全系统都采用什么方式 编写数据库脚本使用 up 数据库 你的地理数据库是什么意思 东莞生鲜冷库软件开发 北京软件开发中心怎么样 计算机网络安全a卷 竹山专业软件开发有哪些 奥克斯软件开发专业面试 青岛萤石互联网科技可信吗 软件开发开销在哪些地方 飞卢小说突然显示无法连接服务器 嵌入式 AI软件开发 个人服务器搭建图床 青岛捷立通网络技术有限公司 一般网络安全系统都采用什么方式 思科软件开发部 供应链互联网科技 苏州软件开发一个多少钱 监控网络安全整治 天津爱福生软件开发
0