【面试】项目为什么能够避免SQL注入?

面试moka时问到这个问题,项目如何预防sql注入的?(PS:问的都是啥啊?!!唉确实是我没学好,连基础都忘了QAQ)


项目能够避免SQL注入的主要是通过MyBatis实现的。

Mybatis中使用#占位符来预防SQL注入

${}#{}的区别

  • #{}匹配的是一个占位符,相当于JDBC中的一个?,会对一些敏感的字符进行过滤,编译过后会对传递的值加上双引号,因此可以防止SQL注入问题。

  • ${}匹配的是真实传递的值,传递过后,会与sql语句进行字符串拼接。${}会与其他sql进行字符串拼接,不能预防sql注入问题。

#{ } 底层使用的是PreparedStatement类的setString()方法来设置参数,此方法会获取传递进来的参数的每个字符,然后进行循环对比,如果发现有敏感字符(如:单引号、双引号等),则会在前面加上一个’/'代表转义此符号,让其变为一个普通的字符串,不参与SQL语句的生成,达到防止SQL注入的效果。

你可能感兴趣的:(面试,sql,面试,mybatis)