使用String来拼装SQL语句,会容易产生注入漏洞。
而使用参数来传递SQL参数值,则可以避免注入漏洞,这个和用什么工具框架没有关系。
在JAVA里,可以使用preparedStatement来避免的:
PreparedStatement pstmtDelete = conn.prepareStatement( "DELETE FROM student WHERE stu_id>=?");
pstmtDelete.setString(1, Integer.toString(id));
Hibernate里,也有对应的方法:
query.setParameter("id",1);
在SQL的存储过程中,尽量使用变量参数,则可以避免漏洞。
如果硬要动态SQL语句组合,则应该使用字段的类型判断,判断如果参数应该是整形的,则应该只有数字,如果是字符型的,则应该把“'”替换为“''”(一个单引号替换为两个单引号)