当前位置: 首页 > 知识库问答 >
问题:

用mybatis防止sql注入的安全方法

鲁杜吟
2023-03-14

我在mybatis查询中使用“$”表示法:

<select id="queryOrgs" resultMap="orgLiteMap" parameterType="gov.cbrc.gzbanking.data.QueryRequest" >
        select id, name from sys_orgs
        <if test="filter != null">where id like #{filter, jdbcType=INTEGER} or name like #{filter, jdbcType=INTEGER}</if>
        <if test="order != null">order by ${order}</if>
        limit #{offset, jdbcType=INTEGER},#{fetch, jdbcType=INTEGER}
     </select>

order参数可以是类似于“id desc”的东西,我需要担心这里的sql注入吗?我们知道mybatis使用PreparedStatement,如果mybatis针对“select”语句调用PreparedStatement#executeQuery(),或者jdbc驱动程序实现不允许在一次调用中使用多个语句,那么sql注入是不可能的,对吗?

这是否足以检查order参数有sql分隔符?

共有1个答案

左宁
2023-03-14

如果订单直接来自用户,您可能会遇到麻烦。你永远不应该相信用户的输入。

回答您的问题:

  • 如果不允许多个查询,如果尝试运行多个查询,则会出现异常;
  • 检查SQL分隔符可能就够了,也可能不够;
    null
String userChoice = order.toLowerCase();
String safeOrder = null;

if ("id desc".equals(userChoice)) {
    safeOrder = "id desc";
} else if ("id asc".equals(userChoice)) {
    safeOrder = "id asc";
....
....
} else if ("name desc".equals(userChoice)) {
    safeOrder = "name desc";
} else {
    // if no clean match then maybe user tried something fishy... 
    // ... go with some default 
    safeOrder = "id desc"; // or null or whatever you like...
}

然后在映射中进行:

<if test="safeOrder != null">order by ${safeOrder}</if>
 类似资料:
  • 在中是否存在防止SQL注入的好方法? 我将此方法用于。实际上,我在查询中使用用户给出的字符串参数。 有什么想法吗?

  • 本文向大家介绍Mybatis防止sql注入的实例,包括了Mybatis防止sql注入的实例的使用技巧和注意事项,需要的朋友参考一下 sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1'='1'”这样的语句,有可能入侵参数校验不足的应用程序。所以在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些安全性很高的应用中,比如银行

  • 本文向大家介绍mybatis防止SQL注入的方法实例详解,包括了mybatis防止SQL注入的方法实例详解的使用技巧和注意事项,需要的朋友参考一下 SQL注入是一种很简单的攻击手段,但直到今天仍然十分常见。究其原因不外乎:No patch for stupid。为什么这么说,下面就以JAVA为例进行说明: 假设数据库中存在这样的表: 然后使用JDBC操作表: 上面的代码经常被一些开发人员使用。想象

  • 所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。具体来说,它是利用现有应用程序,将(恶意)的 SQL 命令注入到后台数据库引擎执行的能力,它可以通过在 Web 表单中输入(恶意)SQL 语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行 SQL 语句。比如先前的很多影视网站泄露 VI

  • 本文向大家介绍Pyhton中防止SQL注入的方法,包括了Pyhton中防止SQL注入的方法的使用技巧和注意事项,需要的朋友参考一下 注意,上面的SQL字符串与后面的tuple之间的分隔符是逗号,平时拼写SQL用的是%。 如果按照以下写法,是容易产生SQL注入的: 这个和PHP里的PDO是类似的,原理同MySQL Prepared Statements。 Python Using the Pytho

  • 本文向大家介绍php防止sql注入的方法详解,包括了php防止sql注入的方法详解的使用技巧和注意事项,需要的朋友参考一下 一、什么是SQL注入式攻击?   所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQ