当前位置:   article > 正文

MyBatis动态表名或动态排序直接使用${}而引发SQL注入安全漏洞的修复解决方案_mybatis动态表名防止sql注入

mybatis动态表名防止sql注入

MyBatis能用#{}尽量用#{},而本文主要解决必须要用${ }的情况下,如何解决${}导致的SQL注入安全漏洞修复

安全风险分析

造成 SQL Injection 漏洞的根本原因在于攻击者可以更改 SQL 查询的上下文,导致程序员原本要作为数据解释的数值却被解释为命令。构造 SQL 查询后,程序员知道哪些字符应作为命令解释,哪些字符应作为数据解释。参数化 SQL 语句可以防止直接窜改上下文,避免几乎所有的 SQL Injection 攻击。参数化 SQL 语句是用常规的 SQL 字符串构造的,但是当需要添加用户提供的数据时,它们就需要使用捆绑参数,这些捆绑参数是一些占位符,用来存放随后插入的数据。换言之,捆绑参数可以使程序员明确告知数据库哪些字符应被视为命令,哪些字符应被视为数据。这样,当程序准备执行某个语句时,它可以为数据库指定每一个捆绑参数所使用的运行时值,而不会存在数据被篡改为命令的风险。

危险代码示例

  1. 动态表名查询代码

select * from ${tablename}

  1. 动态删除代码

delete from ${tablename}

  1. 动态字段排序

select * from xxx order by ${fieldName}

  1. 删除表

drop t

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/401926?site
推荐阅读
相关标签
  

闽ICP备14008679号