我有一个现有的代码,其中应用程序根据很多条件生成不同的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节有示例。
我正在尝试验证注释框的输入,以便只接受文本,并在用户输入数字(1-0)或符号(@\$%)时提醒消息^ 有没有办法在html中做到这一点
所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。具体来说,它是利用现有应用程序,将(恶意)的 SQL 命令注入到后台数据库引擎执行的能力,它可以通过在 Web 表单中输入(恶意)SQL 语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行 SQL 语句。比如先前的很多影视网站泄露 VI
问题内容: 我正在使用hibernate模式开发应用程序。当我尝试创建登录页面时,出现Sql Injection问题。我有以下代码: 在这种情况下,如何防止Sql Injection?loginInfo表的创建表语法如下: 问题答案: 您还有其他选择,请参阅mkyong的这篇不错的文章。
问题内容: 我遇到了一群黑客。他们几次入侵了我客户的网站,我的客户更加生气:(我的客户丢失了他的数据库(有数百条记录),不得不输入所有:( 现在,我将进行更多介绍。 固定文件权限 更改了ftp和主机登录信息 清除所有远程mysql访问 现在正在处理SQL注入问题。我在管理面板登录参数中添加了mysql_real_escape_string。所以我还应该在哪里使用mysql_real_escape_
问题内容: 我正在与Hibernate合作保护我的网站免受SQL Injection。 我听说Hibernate Criteria API比HQL更强大。Hibernate Criteria Api是否可以完全防止SQL注入? 问题答案: 是的,它确实。 Criteria API以及HQL或JPQL中的查询参数均会转义参数,并且不会执行恶意SQL。 仅在您将参数简单地串联到查询中时,才会暴露此漏洞
注意:但凡是sql注入漏洞的程序,都是因为程序要接受来自客户端用户输入的变量或URL传递的参数,并且这个变量或参数是组成sql语句的一部分,对于用户输入的内容或传递的参数,我们应该要时刻保持警惕,这是安全领域里的【外部数据不可信任】的原则,纵观web安全领域的各种攻击方式,大多数都是因为开发者违反了这个原则而导致的,所以自然能想到,就是变量的检测、过滤、验证下手,确保变量是开发者所预想的。 1、检