我想知道 Spring MVC 如何处理 SQL 注入(inject)(以及其他安全问题:XSS、代码 [javascript] 注入(inject)等)。我说的主要是转义添加到数据库等的值。我似乎找不到任何答案,因为每次我搜索涉及依赖注入(inject)的spring sql注入(inject)结果都会出现。
我的流程如下:我从客户端浏览器发出一个请求,该请求包含一个带有一些查询参数的 JSON(不是 SQL 语句,这太愚蠢了——在 JS 中形成 SQL 查询)。当请求到达 Controller 中正确注释的方法时,请求通过 @RequestBody 使用 Jackson 映射到“请求对象”。现在这个对象被发送到 DAO,在那里我使用 JDBC 模板查询数据库(并使用 RowMapper 映射结果)。
在 DAO 我有类似的东西:
public int countAll(RequestObject request) {
String sql = "SELECT count(*) FROM employees WHERE name = '" + request.getName() + "'";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
int count = jdbcTemplate.queryForInt(sql);
return count;
}
现在这种方法对 SQL 注入(inject)安全吗?
考虑到流经 Spring MVC 的非基于 JDBCTemplate 的查询是否安全?
我们可以就此进行一些讨论吗?
最佳答案
任何时候通过连接构建查询时,都容易受到注入(inject)攻击
正确传递参数:
jdbcTemplate.queryForInt(sql, args, argTypes)
例如: JdbcTemplate insert = new JdbcTemplate(dataSource);
insert.update("INSERT INTO PERSON (FIRSTNAME, LASTNAME) VALUES(?,?)",
new Object[] { firstName, lastName });
关于Spring(MVC)SQL注入(inject)避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8472608/