Java 如何防止sql注入

35 篇文章 0 订阅

java 如何防止sql注入

SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是因为程序员没有做好判断,被不法用户钻了SQL的空子,这里结合网上资料,给出java如何防止收起来注入的方法。

  • java

方法/步骤

1

java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只是输入参数,SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构 ,大部分的SQL注入已经挡住了, 在WEB层我们可以过滤用户的输入来防止SQL注入比如用Filter来过滤全局的表单参数 。下面就举三个例子来说明一下:

2

第一种:

采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可,如下所示:

String sql= "select * from users where username=? and password=?";

PreparedStatement preState = conn.prepareStatement(sql);

preState.setString(1, userName);

preState.setString(2, password);

ResultSet rs = preState.executeQuery();...

3

第二种:

采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入,如下所示:

public static String TransactSQLInjection(String str)

{

      return str.replaceAll(".*([';]+|(--)+).*", " ");

}



userName=TransactSQLInjection(userName);

password=TransactSQLInjection(password);



String sql="select * from users where username='"+userName+"' and password='"+password+"' "

Statement sta = conn.createStatement();

ResultSet rs = sta.executeQuery(sql);

4

第三种:

使用Hibernate框架的SQL注入防范 Hibernate是目前使用最多的ORM框架,在Java Web开发中,很多时候不直接使用JDBC,而使用Hibernate来提高开发效率。

在Hibernate中,仍然不应该通过拼接HQL的方式,而应使用参数化的方式来防范SQL注入。有两种方式,一种仍然是使用JDBC一样的占位符“?”,但更好的方式是使用Hibernate的命名参数,例如检测用户名和密码是否正确,使用Hibernate可以写成如下:

String queryStr = “from user where username=:username ”+”password=:password”;

List result = session.createQuery(queryStr).setString("username", username).setString("password", password).list();

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值