使criteria.add(Restrictions.sqlRestriction())成为sql注入证明



Folks,

我正在hibernate 3中构建一个标准,如下所示。这是sql注入证明吗?

criteria
    .add(
         Restrictions.sqlRestriction(
            "to_char(createDate,'mm/dd/yyyy') like '%" + dateString + "%'"),
         StandardBasicTypes.STRING);

我想的另一个选项是将dateString转换为日期和这个

criteria.add(Restrictions.eq(createDate, dateObjCreatedFromString)

不,这不是SQL注入的证明,因为您使用的是普通的字符串操作来构建限制。以下是如何正确操作(假设您必须使用sqlRestriction来解决此问题(:

criteria
    .add(
         Restrictions.sqlRestriction(
            "to_char(createDate,'mm/dd/yyyy') like ?", 
            "%" + dateString + "%", StandardBasicTypes.STRING));

我会将日期字符串解析为java日期。它还有一个优点,即您可以更好地控制支持的日期格式。

当字符串由客户端转换时会更好。客户端可以更好地处理格式错误的输入字符串。

最新更新