使用Hibernate防止SQL注入
我有一个现有的代码,其中应用程序根据很多条件生成不同的sql并通过hibernate会话createSQLQuery()执行它们。在这里,这些参数与作为普通字符串替换驻留在java类中的sql字符串相连接。现在的问题是,我需要防止sql注入。因此,为此,我必须使用getNamedQuery()并绑定参数,以便hibernate将处理特殊字符。但是问题在于将字符串sql的字符串移动到xml文件是一项开销,因为有条件地生成sql的字符串。因此,我决定手动进行特殊字符验证,并将其附加到字符串查询中,然后按原样执行。因此,然后我检查发现的PrepareStatement的来源,它只是抛出异常
byte[] arrayOfByte1 = new byte[0];try
{
arrayOfByte1 = CharsToBytes(this.OdbcApi.charSet, arrayOfChar);
}
catch (UnsupportedEncodingException localUnsupportedEncodingException) {
}
我如何在参数与字符串查询进行连接以消除SQL注入之前,在上述参数的Java类中进行相同类型的编码?还是有什么办法我仍然可以保留字符串sql,因为它是一个附加参数并使用hibernate执行查询?
回答:
据我所知,您想即时创建SQL查询,因为条件的组合(我想是来自UI)可能非常复杂。没关系。您需要控制的只是用户提供的参数。为此,您可以并且应该仍然使用Hibernate的createSqlQuery()
。该函数可以?
了解位置参数(从查询字符串的开头编号)或:param_name
语法,然后提供命名参数。您无需将任何内容移动到xml文件中。
16.1.7节有示例。
以上是 使用Hibernate防止SQL注入 的全部内容, 来源链接: utcz.com/qa/410346.html