public list orderlist(string studentid){ string sql = "select id,course_id,student_id,status from course where student_id = ?"; return jdbctemplate.query(sql,new object[]{studentid},new beanpropertyrowmapper(course.class)); }
这样我们传进来的参数 4 or 1 = 1就会被当作是一个student_id,所以就不会出现sql注入了。
2. 确认每种数据的类型,比如是数字,数据库则必须使用int类型来存储
3. 规定数据长度,能在一定程度上防止sql注入
4. 严格限制数据库权限,能最大程度减少sql注入的危害
5. 避免直接响应一些sql异常信息,sql发生异常后,自定义异常进行响应
6. 过滤参数中含有的一些数据库关键词
@component public class sqlinjectionfilter implements filter { @override public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain chain) throws ioexception, servletexception { httpservletrequest req=(httpservletrequest)servletrequest; httpservletrequest res=(httpservletrequest)servletresponse; //获得所有请求参数名 enumeration params = req.getparameternames(); string sql = ""; while (params.hasmoreelements()) { // 得到参数名 string name = params.nextelement().tostring(); // 得到参数对应值 string[] value = req.getparametervalues(name); for (int i = 0; i = 0) { return true; } } return false; } }