Java 足够安全吗?

Java 足够安全吗?,java,sql,spring,Java,Sql,Spring,像这样的insert语句足够安全吗?我必须检查它是否不是SQL可注入的吗 @Autowired private SessionFactory sessionFactory; public void add(String title, String region, String def, String rangeStart, String rangeEnd, Date extradition, Date expiration) { Session session = nu

像这样的
insert
语句足够安全吗?我必须检查它是否不是SQL可注入的吗

@Autowired
private SessionFactory sessionFactory;

public void add(String title, String region, String def, String rangeStart,
        String rangeEnd, Date extradition, Date expiration) {
    Session session = null;

    session = this.sessionFactory.getCurrentSession();
    Query query = session
            .createSQLQuery(
                    "INSERT INTO operators VALUES(NULL,:title,:region,:def,:rangeStart,:rangeEnd, :extradition, :expiration )")
            .setString("title", title).setString("region", region)
            .setString("def", def).setString("rangeStart", rangeStart)
            .setString("rangeEnd", rangeEnd)
            .setDate("extradition", extradition)
            .setDate("expiration", expiration);
    int updated = query.executeUpdate();
}

是的,它对于SQL注入攻击足够安全。请注意,
Query#executeUpdate
将在后台使用
PreparedStatement
为参数设置数据,这使得该语句足够安全

PreparedStatement
将直接在指定字段中写入
字符串
s内容,并转义任何不需要的值

不过,请注意,如果您的查询设计不好,您将面临SQL注入攻击。例如,如果创建查询但手动附加
字符串

String sqlOpenToSqlInjection = "FROM operators WHERE stringField = " + stringVariable;
Query query = session.createSQLQuery(sqlOpenToSqlInjection);
//code to execute query...
更多信息:



看起来您也在使用Hibernate,因此保存实体会更好。这将是类似的,但需要处理/维护的代码更少。

是的,它对于SQL注入攻击来说足够安全。请注意,
Query#executeUpdate
将在后台使用
PreparedStatement
为参数设置数据,这使得该语句足够安全

PreparedStatement
将直接在指定字段中写入
字符串
s内容,并转义任何不需要的值

不过,请注意,如果您的查询设计不好,您将面临SQL注入攻击。例如,如果创建查询但手动附加
字符串

String sqlOpenToSqlInjection = "FROM operators WHERE stringField = " + stringVariable;
Query query = session.createSQLQuery(sqlOpenToSqlInjection);
//code to execute query...
更多信息:



看起来您也在使用Hibernate,因此保存实体会更好。这将是类似的,但需要处理/维护的代码更少。

是的,它对于SQL注入攻击来说足够安全。请注意,
Query#executeUpdate
将在后台使用
PreparedStatement
为参数设置数据,这使得该语句足够安全

PreparedStatement
将直接在指定字段中写入
字符串
s内容,并转义任何不需要的值

不过,请注意,如果您的查询设计不好,您将面临SQL注入攻击。例如,如果创建查询但手动附加
字符串

String sqlOpenToSqlInjection = "FROM operators WHERE stringField = " + stringVariable;
Query query = session.createSQLQuery(sqlOpenToSqlInjection);
//code to execute query...
更多信息:



看起来您也在使用Hibernate,因此保存实体会更好。这将是类似的,但需要处理/维护的代码更少。

是的,它对于SQL注入攻击来说足够安全。请注意,
Query#executeUpdate
将在后台使用
PreparedStatement
为参数设置数据,这使得该语句足够安全

PreparedStatement
将直接在指定字段中写入
字符串
s内容,并转义任何不需要的值

不过,请注意,如果您的查询设计不好,您将面临SQL注入攻击。例如,如果创建查询但手动附加
字符串

String sqlOpenToSqlInjection = "FROM operators WHERE stringField = " + stringVariable;
Query query = session.createSQLQuery(sqlOpenToSqlInjection);
//code to execute query...
更多信息:




看起来您也在使用Hibernate,因此保存实体会更好。这将是类似的,但需要处理/维护的代码更少。

首先,问问自己:什么是?然后您应该能够回答自己:)注意,SQL注入只涉及一个非常特定的场景——当查询的形状被改变时。(这也意味着它可以不注射,但仍然不“安全”。)首先,问问自己:什么是?然后您应该能够回答自己:)注意,SQL注入只涉及一个非常特定的场景——当查询的形状被改变时。(这也意味着它可以不注射,但仍然不“安全”。)首先,问问自己:什么是?然后您应该能够回答自己:)注意,SQL注入只涉及一个非常特定的场景——当查询的形状被改变时。(这也意味着它可以不注射,但仍然不“安全”。)首先,问问自己:什么是?然后您应该能够回答自己:)注意,SQL注入只涉及一个非常特定的场景——当查询的形状被改变时。(这也意味着它可能是无注射的,但仍然不“安全”。)如果没有更多,那么这只是一个评论。尤其是来自35k+用户的。@juergend我知道,但这是回答OP问题的唯一一句话。我们应该投票结束吗?我不这么认为,因为这是一个有效的问题。@LuiggiMendoza这是一个有效的问题,但可能与这个问题重复?@OnurğağrıcıHibernate as已经阻止SQL查询进行SQL注入,因为它使用
PreparedStatement
s进行创建的查询。这就是答案。如果没有更多的答案,那么这只是一个评论。尤其是来自35k+用户的。@juergend我知道,但这是回答OP问题的唯一一句话。我们应该投票结束吗?我不这么认为,因为这是一个有效的问题。@LuiggiMendoza这是一个有效的问题,但可能与这个问题重复?@OnurğağrıcıHibernate as已经阻止SQL查询进行SQL注入,因为它使用
PreparedStatement
s进行创建的查询。这就是答案。如果没有更多的答案,那么这只是一个评论。尤其是来自35k+用户的。@juergend我知道,但这是回答OP问题的唯一一句话。我们应该投票结束吗?我不这么认为,因为这是一个有效的问题。@LuiggiMendoza这是一个有效的问题,但可能与这个问题重复?@OnurğağrıcıHibernate as已经阻止SQL查询进行SQL注入,因为它使用
PreparedStatement
s进行创建的查询。这就是答案。如果没有更多的答案,那么这只是一个评论。尤其是来自35k+用户的。@juergend我知道,但这是回答OP问题的唯一一句话。我们应该投票结束吗?我不这么认为,因为这是一个有效的问题。@LuiggiMendoza这是一个有效的问题,但可能是重复的