小编Gau*_*rav的帖子

当语句具有动态表名时,如何防止SQL注入?

我有这样的代码.

   final PreparedStatement stmt = connection
                .prepareStatement("delete from " + fullTableName
                    + " where name= ?");
   stmt.setString(1, addressName);
Run Code Online (Sandbox Code Playgroud)

计算fullTableName是这样的:

 public String getFullTableName(final String table) {
    if (this.schemaDB != null) {
        return this.schemaDB + "." + table;
    }
    return table;
 }
Run Code Online (Sandbox Code Playgroud)

schemaDB是环境的名称(可以随时间更改),table是表名(将被修复).

schemaDB来自一个XML文件,使查询易受SQL注入攻击.

查询:我不确定如何将表名用作预准备语句(如name本示例中所使用的),这是针对SQL注入的100%安全措施.

任何人都可以建议我,可能有什么方法可以解决这个问题?

注意:我们将来可以迁移到DB2,因此该解决方案应该与Oracle和DB2兼容(如果可能的话,与数据库无关).

java db2 jdbc oracle12c

9
推荐指数
1
解决办法
2594
查看次数

Hibernate:session.load vs session.get

我的印象是session.load()在缓存中加载代理对象,同时session.get()总是访问数据库,但看到JavaBrains 视频后我感到困惑.

根据这段视频,当我们调用下面的get方法时,它正在加载UserDetails内存中的代理对象.

user = (UserDetails) session.get(UserDetails.class, 1); 
Run Code Online (Sandbox Code Playgroud)

结构UserDetails

在此输入图像描述

在评论部分,一个人评论说:

没有User类的代理,而是创建了集合的代理对象.

现在这里有两个问题.

1st:与session.load()和session.get()的获取策略和代理对象的创建有关,我已经在下面回答了这个问题.

第二种:在这种情况下,代理对象将为UserDetails或集合创建(仍有待回答).

谢谢

java persistence hibernate

8
推荐指数
1
解决办法
1306
查看次数

标签 统计

java ×2

db2 ×1

hibernate ×1

jdbc ×1

oracle12c ×1

persistence ×1