JAVA中的防SQL注入攻击

       要想知道怎么防SQL注入攻击,就要先了解什么是SQL注入攻击。SQL注入攻击是网络中一种常见的攻击方式,

它利用程序中的疏忽,在参数中加入一些关键字对SQL语句进行更改,将密码验证部分的功能架空,从而实现无需

密码进行登录,甚至是对数据库进行破坏。在另一篇文章里提到的statement语句就有可能出现这样的情况。

        那么怎么防止SQL注入攻击呢,方式其实有很多。这里介绍两种:

        一、正则表达式

        既然攻击是通过参数对关键字进行修改的,那么我们就可以用一个正则表达式对传入的参数进行限制,如果参数

中含有能对SQL语句造成影响的特殊符号或关键字,就退出程序,返回输入不合法的提示。

        二、PreparedStatement

        PreparedStatement语句是预编译的语句对象,他可以先将语句中的参数用占位符 ?代替,形成一个语句骨架发送

到服务器上,让服务器编译确定下来,这样,后面传进来的参数即使有特殊符号和关键字,也不会再对SQL产生影响了。

下面是例子:

/**
 * 根据用户名和密码查询用户信息
 * 通过PreparedStatement对象防止SQL注入攻击问题
 * @param username 
 * @param password
 */
private static void login(String username, String password) {
    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    try {
       //注册驱动并获取连接
       conn = JdbcUtil.getConn();
       //获取传输器并发送sql到服务器执行
       String sql = "select * from user where username=? and password=?";
       //将sql骨架发送给服务器,让服务器编译并确定下来(防止篡改)
       ps = conn.prepareStatement( sql );
       //将参数值传过去替换占位符
       ps.setString( 1 ,  username );
       ps.setString( 2 ,  password );
       //执行sql语句,返回执行结果
       rs = ps.executeQuery();
       
       //处理结果
       if( rs.next() ) {//用户名密码正确
           System.out.println("恭喜您登录成功!");
       }else {//用户名密码不正确
           System.out.println("登录失败,用户名或密码错误!");
       }
       
    } catch (Exception e) {
       e.printStackTrace();
    } finally {
       //释放资源
       JdbcUtil.close(conn, ps, rs);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值