SQL注入与防范

作者: 冰与河豚鱼 | 来源:发表于2018-08-14 16:18 被阅读0次

在web应用架构下,终端用户无法直接访问数据库,需要通过http请求到java应用服务器,然后由java应用服务器来访问后端数据库,恶意用户想要获取数据库中的核心价值数据就绕不开Java应用程序,唯一的途径是利用业务程序的漏洞,伪装自己的请求,欺骗业务程序达到最终获取数据库数据的目的。

SQL注入:用户在输入表单或url参数中输入sql命令达到欺骗Java应用程序的目的,破坏原有sql语义,发送恶意的sql到后端数据库,导致数据库信息出现泄露的漏洞。

例如:用户表单登录:用户名:zhangsan’;-- (<-有一个空格)
提交之后:select * from user where username=’zhangsan’;-- ‘ and password = ‘111’;
导致--后面的内容被注释

原因:利用java服务器的动态拼接sql的漏洞,破坏了原先java程序设定的sql语义,欺骗服务器达到恶意获取数据的目的。

解决方案:调用.preparedStatement(sql)方法传入格式化的sql
select * from user where username=? And password = ? (?:占位符)
代码如下:

public static User login(String userName, String password) throws ClassNotFoundException{
      Connection conn = null;
      PreparedStatement ptmt = null;
      ResultSet rs = null;
      User user = null;
//装载驱动程序
Class.forName(JDBC_DRIVER);
//建立数据库连接
try{
     conn = DriverManager.getConnection(DB_URL,USER,PASSWD);
     //执行sql语句
     ptmt = conn.prepaerStatement("select * from user userName = ? and password = ?");
     ptmt.setString(1,userName);
     ptmt.setString(2,password);
     rs = ptmt.executeQuery();
     //获取执行结果
     while(rs.next()){
         user = new User();
         user.setUserName(rs.getString("userName"));
         user.setSex(rs.getBoolean("sex"));
        }
    }catch(SQLException e){
       //异常处理
       e.printStackTrace();
    }finally{
       //清理资源
       try{
            if(conn != null)  conn.close();
            if(ptmt != null)  ptmt.close();
            if(rs != null)    rs.close();
       }catch(SQLException e){
       }
   }
  return user;
 }

注意事项:

  • 严格的数据库管理权限:仅给与Web应用访问数据库的最小权限;避免 Drop table等权限。
  • 封装数据库错误:禁止直接将后端数据库异常信息暴露给用户;对后端异常信息进行必要的封装,避免用户直接查看后端异常。
  • 机密信息禁止明文存储:涉密信息需要加密处理,使用AES_ENCRYPT和AES_DECRYPT加密和解密

相关文章

  • Django 常见Web攻击

    1、sql注入攻击与防范 sql注入是黑客攻击数据库最常用的手段。sql注入的危害: 非法读取、篡改、删除数据库中...

  • SQL注入与防范

    在web应用架构下,终端用户无法直接访问数据库,需要通过http请求到java应用服务器,然后由java应用服务器...

  • 面试官问你 SQL 注入攻击了吗?

    为什么要聊 SQL 注入攻击? 什么是 SQL 注入攻击? 如何进行 SQL 注入攻击? 如何防范? 常见面试题 ...

  • Java安全编程指南

    SQL注入防范 SQL注入指利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的攻击方法。Java程...

  • java安全编码指南之:输入注入injection

    简介 注入问题是安全中一个非常常见的问题,今天我们来探讨一下java中的SQL注入和XML注入的防范。 SQL注入...

  • 谈谈sql注入之防范(四)

    了解了SQL注入的方法后,如何能防止SQL注入?如何进一步防范SQL注入的泛滥?怎么通过一些合理的操作和配置来降低...

  • SQL注入及其防范

    1.什么是SQL注入 在java中无论是使用orm框架还是直接使用JDBC操作数据库我们经常都会碰到拼接字符串的情...

  • SQL注入实战篇

    今天要介绍的是SQL注入实验。SQL注入攻击的学习,我们更多的目的是为了学习攻击技术和防范策略,而不是刻意去攻击数...

  • 第十章 在线教育平台(web常见攻击以及防备)

    web常见攻击以及防备 标签: django sql注入攻击与防范 特点[1] 非法读取、篡改、删除数据库数据[2...

  • Java数据库开发(三)之——补充

    一、SQL注入与防范 二、事务 定义 事务是并发控制的基本单位,满足ACID特征 原子性:atomicity 一致...

网友评论

    本文标题:SQL注入与防范

    本文链接:https://www.haomeiwen.com/subject/sldvbftx.html