对于 MyBatis 的 #
传参,虽然最终的 SQL 查询语句中会将参数值替换到对应的位置,但是这个过程并不是简单的字符串拼接,而是通过预编译的方式进行处理。这样做有以下几个方面的好处,从而减少了 SQL 注入的风险:
-
参数值转义:在参数化查询中,MyBatis 会自动对参数值进行转义处理。这样可以确保用户输入的特殊字符(如单引号、分号等)不会被误解为查询语句中的关键字符,从而防止 SQL 注入攻击。
-
查询计划重用:MyBatis 会将参数化查询的 SQL 语句进行预编译,将查询计划缓存起来。这样,在后续相同或类似的查询中,可以直接使用缓存的查询计划,避免了每次都重新解析 SQL 语句。这种重用查询计划的方式也增加了对 SQL 注入的防范,因为注入攻击往往需要构造新的查询语句,而预编译查询计划的复用使得攻击者难以注入恶意代码。
-
数据类型安全检查:MyBatis 对于参数化查询中的参数值会进行数据类型的安全检查,以确保参数的类型与数据库字段的类型匹配。这样可以防止一些类型不匹配导致的错误,同时也增加了对 SQL 注入的防御,因为注入攻击可能会尝试利用类型错误获得额外信息或执行意外的操作。
总结来说,MyBatis 的 #
传参通过参数值的转义处理、查询计划的重用和数据类型的安全检查等机制,有效地减少了 SQL 注入的风险。这种安全性的提升是由 MyBatis 框架本身来确保的,而不是简单的将参数值拼接到 SQL 语句中执行。
(相对应的,${}的形式传参,就是简单的字符串拼接,如果要用,那就要在前期自己做好各种严格校验哦)
标签:传参,查询,参数,SQL,MyBatis,参数值,注入 From: https://www.cnblogs.com/gongjing999/p/17687647.html