我的JPA方法看起来像
@Query(value="select em from Employee em where em.firstName like %:text% or em.lastName like %:text%") Employee findBySearchText(String text);
由于我使用的是命名参数,因此不会有任何SQL注入的风险。
但是在checkmarx工具中,它被标记为一个高漏洞,建议使用OWASP库对输入进行净化。
还有别的办法来解决这个问题吗。
发布于 2022-09-07 08:01:47
参数值被绑定为JDBC参数,因此这里不可能有SQL注入。您可能想要净化的唯一东西是特殊的通配符 ? 和 % 。为此,可以在参数值中使用转义字符指定转义字符和前缀特殊字符。
?
%
您可以使用这样的东西,这是安全的,也是更正确的(您原来的HQL可能只是偶然地起作用):
default Employee findBySearchText(String text) { if (text == null || text.isBlank()) return null;