SQL注入使用参数的值作为其名称

时间:2015-01-01 03:13:32

标签: mysql sql jpa

如果我使用参数值作为名称,我是否容易受到sql注入?

for(String tag : choixalerte.selectedNomExestingtags)
    where += " ach.NOM_ACHTEUR LIKE :" + tag + " or ao.OBJET LIKE :" + tag + "  or lot.INTITULE LIKE :" + tag + "";

// ...

Query native_query = entityManager.createNativeQuery(...);

if(choixalerte.selectedNomExestingtags != null)
    for(String tag : choixalerte.selectedNomExestingtags)
        native_query.setParameter(tag, "%" + tag + "%");

1 个答案:

答案 0 :(得分:3)

是。您不应该在查询中连接字符串。

如果您不想遭受攻击,您可以选择以下方式:

1)不要连接,使用"?"代替

2)清理参数,可以删除所有无效字符。删除#或 - 以及任何其他类型的sql命令。

请注意,您需要始终谨慎使用此代码,因为如果出现新的攻击类型,则需要编辑清理代码。