Spring(MVC)SQL注入(inject)避免?

标签 spring sql-injection jdbctemplate

我想知道 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/

相关文章:

java - 如何在Spring注释配置中指定bean的父级?

java - 支持 JavaFX + Spring Boot + Hibernate 应用程序中的多种环境

python - Python 中的 SQL 注入(inject)预防 - 使用参数化查询是否足够?

sql - 如何防止Wordpress中的SQL注入(inject)?

python - Django 表单如何清理文本输入以防止 SQL 注入(inject)、XSS 等?

java - 简单的 Jdbc 模板。 - 插入和检索 ID

java - 在哪里寻找 Spring XML namespace 配置的确切效果?

java - spring MVC去除页面url前缀和后缀

java - 使用 jdbctemplate 插入查询给出异常 UncategorizedSQLException

oracle - 在 SimpleJdbcInsert 对象中指定 Oracle Sequence 以从 Oracle Sequence 生成 key