确定SQL注入死透了么?


确定SQL注入死透了么?

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

确定SQL注入死透了么?

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

推荐(免费):sql

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

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

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

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

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

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

MyBatis依然存在SQL注入

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

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

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

    SONIFY.io SONIFY.io

    设计和开发音频优先的产品和数据驱动的解决方案

    SONIFY.io 83 查看详情 SONIFY.io

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

<select id="queryAll"  resultMap="resultMap">
  SELECT * FROM order WHERE id = #{id}
</select>

但可惜的是,有些场景,并不能使用预编译方式(或者你仅仅是不知道或者懒)。像一些代码重构,把表名/列名/排序等字段,动态传入的时候,不可避免的就需要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
<foreach collection="tag" item="item" open="("separatosr="," close=")">
#{tag} 
</foreach>

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

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

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

总结

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

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

以上就是确定SQL注入死透了么?的详细内容,更多请关注其它相关文章!


# 行数  # 微博营销推广优劣  # 陈翔创业圈seo  # 视频推广网站图片  # 锡林郭勒营销推广电话  # 内丘网站建设  # seo 吾爱破解  # 政府网站建设便民  # 营销站内推广  # 品牌推广策划网站有哪些  # 荣成市关键词seo排名优化  # SQL注入  # 都是  # 就可以  # 开发人员  # 会报  # 很久  # 重构  # 报错  # 透了  # 的是 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 优酷官网登录入口电脑版 优酷官网网址入口  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  如何在mysql中使用索引提示_mysql索引提示优化方法  画质怪兽120帧安卓和平精英免费版  外媒评《燕云十六声》DIY载具新玩法:很像《塞尔达传说王国之泪》!  跨语言测试实践:使用Python Selenium测试现有J*a Web项目  yy漫画官方网站登录入口_yy漫画在线阅读页面地址  Excel宏怎么删除_Excel中删除宏的详细操作流程  Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区  ExcelSCAN与LAMBDA如何创建自定义移动平均函数_SCAN实现任意窗口期移动平均计算  顺丰快递收费标准查询_如何查看顺丰最新收费价格  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制  使用Python和GBGB API高效抓取指定日期范围和赛道比赛结果教程  diskgenius分区工具如何设置Bios启动项  高德地图导航路线偏差报警频繁怎么办 高德地图路线偏差修复与优化方法  抖音号怎么解除企业认证改成个人?改成个人有影响吗?  顺丰官方查单号入口 顺丰快递单号查询官网入口  冬季去哪个城市旅游更有可能观测到极光  SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南  虫虫助手如何更新游戏  解决VS Code中Python版本冲突与输出异常的指南  Python中对象引用与链表属性赋值的机制解析  顺丰快递在线查询系统 顺丰快递官方查单入口  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  美发店速赢秘籍  《下一站江湖2》大雪山加入方法  微博网页版入口链接 微博网页版在线互动平台  店铺如何关联视频号推广?视频号推广有什么用?  《宝可梦大集结》S4冠军之路开始时间介绍  《荔枝fm》导出文件教程  PHP utf8_encode 字符编码转换陷阱与解决方案  J*aScript中高效处理用户输入:从Keyup事件到表单提交的优化实践  小米倒班助手添加日历提醒  steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明  三角洲行动2025年9月10日摩斯密码分享  一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化  优化CSS动画与J*aScript定时器协同:构建稳定Toast提示  《全民k歌》音乐怎么下载到本地2025  Magento 2 产品保存事件中安全更新属性的最佳实践  《360浏览器》自动保存账号密码设置方法  《优志愿》修改手机号方法  t3出行如何使用微信支付  德邦快递会员怎么开通  铁路12306官网登录入口 铁路12306在线购票官方平台  使用逻辑应用(Logic Apps)自动处理邮件附件中的XML到Excel  yy漫画登录页面官方入口_yy漫画在线阅读网址入口  windows server2019显卡驱动怎么安装_winserver2019显卡驱动安装与远程桌面优化  C++ static关键字作用_C++静态成员变量与静态函数  全球各国上班时间表外贸邮件时间 

 2021-03-15

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.