SQL注入问题

  • 导致SQL注入的根本原因是什么?

    • 用户输入的信息中含有sql语句的关键字,并且用户所输入的信息参与了sql语句的编译过程,导致sql语句的原意被扭曲。
  • 模拟用户登陆注册,演示sql注入


    import java.sql.*;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Scanner; /**
    * 存在sql注入问题隐患 例如输入: 'fdsa' fdsa' or'1'='1 就会登录成功,因为 or一边成立就成立,1恒等于1
    * 导致SQL注入的根本原因是什么?
    * 用户输入的信息中含有sql语句的关键字,并且用户所输入的信息参与了sql语句的编译过程,导致sql语句的原意被扭曲。
    */
    public class Main {
    public static void main(String[] args) throws SQLException { //掉用initUI()获取用户名密码
    Map<String,String> userLoginInfo=initUI(); //调用register()方法。
    //boolean registerSuccess=register(userLoginInfo); //输出结果
    //System.out.println(registerSuccess?"注册成功":"注册失败"); //调用logIn()方法。
    boolean loginSuccess=login(userLoginInfo);
    System.out.println(loginSuccess?"登陆成功":"密码错误"); } /**
    * 用户注册
    * @param userLoginInfo 用户登录信息
    * @return true成功, false失败
    */ private static boolean register(Map<String, String> userLoginInfo) {
    //创建连接对象
    Connection connection=null;
    Statement statement=null;
    int count=0; try {
    //注册驱动
    Class.forName("com.mysql.cj.jdbc.Driver"); //获取连接
    connection= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
    "root","123456"); //获取数据库操作对象
    statement=connection.createStatement(); //执行SQL语句
    count=statement.executeUpdate("insert into t_user(loginName,loginPwd,realName)values('"+userLoginInfo.get("loginName")+"','"+userLoginInfo.get("loginPwd")+"',' ') "); } catch (ClassNotFoundException | SQLException e) {
    e.printStackTrace();
    }finally {
    if(statement!=null){
    try {
    statement.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    } if(connection!=null){
    try {
    connection.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    if(count==1){
    return true;
    }
    return false;
    } /**
    * 用户登录
    * @param userLoginInfo 用户信息
    * @return 成功true 失败fslse
    */ private static boolean login(Map<String, String> userLoginInfo) throws SQLException { //标识
    boolean flag=false; //获取用户信息
    String loginName=userLoginInfo.get("loginName");
    String loginPwd=userLoginInfo.get("loginPwd"); //创建连接对象
    Connection connection=null;
    Statement statement=null;
    ResultSet resultSet=null; try {
    //注册驱动
    Class.forName("com.mysql.cj.jdbc.Driver"); //获取连接
    connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
    "root","123456"); //获取数据库连接对象
    statement=connection.createStatement(); //执行SQL语句
    resultSet=statement.executeQuery("select * from t_user where loginName='"+loginName+"'and loginPwd='"+loginPwd+"'"); //处理查询结果集
    if(resultSet.next()){
    flag=true;
    }
    } catch (ClassNotFoundException | SQLException e) {
    e.printStackTrace();
    }finally {
    if(resultSet!=null){
    resultSet.close();
    }
    if(statement!=null){
    statement.close();
    }
    if (connection!=null){
    connection.close();
    }
    } return flag;
    } /**
    * 初始化用户界面
    * @return 返回用户登录信息
    */
    private static Map<String, String> initUI() { //创建用户信息接收对象
    Scanner scanner=new Scanner(System.in); //获取用户名
    System.out.println("请输入您的用户名:");
    String userName=scanner.nextLine(); //获取密码
    System.out.println("请输入您的密码:");
    String pwd=scanner.nextLine(); //创建一个Map集合用来存放用户输入得用户名和密码
    Map<String,String> userLoginInfo=new HashMap<String,String>(); //存入Map集合
    userLoginInfo.put("loginName",userName);
    userLoginInfo.put("loginPwd",pwd); //返回该集合
    return userLoginInfo;
    }
    }

JDBC_07_SQL注入问题 (登录和注册)的更多相关文章

  1. JDBC_08_解决SQL注入问题 (登录和注册)

    解决SQL注入问题 只要用户提供的信息不参与sql语句的编译过程,那么尽管用户输入的信息中含有sql关键字那么也不会起作用了 要想使用户提供信息不参与sql语句的编译过程,那么必须使用 java.sq ...

  2. IO流的登录与注册

    import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileR ...

  3. XMPP iOS客户端实现三:登录、注册

    1.创建一个单例模式来管理xmpp的连接和操作 +(XMPPManager *)share { static XMPPManager *_share=nil; static dispatch_once ...

  4. 利用SQL注入漏洞登录后台的实现方法

    利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...

  5. 今天发现之前瑞乐做的登录和注册居然都是用的get请求,瞬间出了一身冷汗.

    今天发现之前瑞乐做的登录和注册居然都是用的get请求,瞬间出了一身冷汗. 然后迅速的让晓勇改成post请求了. 不然我觉得凡是有点抓包能力的人抓到我们登录和注册这么涉及安全的东西居然用的是get请求, ...

  6. 免费 PSD 下载: 20个精美的登录和注册表单

    注册表单有许多不同的形状和尺寸,有的只是单个的输入框,有的则需要多个步骤.登录表单的设计将定义网站的性质,因此它应进行针对性的设计.下面的列表提供了20个醒目的登录和注册表单设计为您提供灵感. 您可能 ...

  7. IOS Storyboard使用-模拟登录、注册、混合使用

    最近分析IOS的占有率,发现5.0以下的少之又少了,故而决定新的App用 Storyboard开发,找了很多资料都是点上的,这个简单的demo是测试代码,发上来,供新手参考. 模拟登录.注册.和显示主 ...

  8. 利用开源项目使discus论坛与java应用同步登录和注册

    最近做了一个资源库系统的项目,老师说可以搭建开源论坛替代自己开发社交模块(评论啊,反馈啊)来减轻负担,甚至提到了要给每个资源开一帖的功能..使我十分怀疑到底是减轻负担还是增加负担...不过怀疑归怀疑, ...

  9. PHP实现登录,注册,密码修改

    注册,登录,修改密码 1.登录 2.忘记密码 3.免费注册 页面布局 <div id="views" class="views"> <div ...

随机推荐

  1. Example之selectOneByExample方法和selectByExample的使用

    selectOneByExample示例如下: Example userExample = new Example(User.class);userExample.createCriteria().a ...

  2. MYSQL bin_log 开启及数据恢复

    参考博客: A:https://www.jianshu.com/p/55b0d52edca2 B:https://www.cnblogs.com/martinzhang/p/3454358.html ...

  3. WPF -- 一种直线识别方案

    本文介绍一种直线的识别方案. 步骤 使用最小二乘法回归直线: 得到直线方程y=kx+b后,计算所有点到直线的距离,若在阈值范围内,认为是直线. 实现 /// <summary> /// 最 ...

  4. xmake v2.5.2 发布, 支持自动拉取交叉工具链和依赖包集成

    xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...

  5. secure 审计暴力登陆

    文件路径 cd /var/log -rw------- 1 root root 1200063 Aug 10 20:04 secure 做应急响应,或者做脚本监控的时候,都可以参考如下特征 ... A ...

  6. C语言相关的基础字符串函数

    C语言中没有专门的字符串类型,所以就用字符数组和字符指针形式表示 1 char arr[]="abcdef"; //字符数组表示的字符串 2 char*arr="abce ...

  7. web服务器-并发服务器2

    阅读目录 1.Web静态服务器-5-非堵塞模式 2.Web静态服务器-6-epoll 3.Web静态服务器-7-gevent版 4.知识扩展-C10K问题 一.Web静态服务器-5-非堵塞模式 单进程 ...

  8. 使用createrepo构建本地yum仓库

    rpm包安装的时候会有很多软件会出现因为其他依赖包没有,而导致安装失败的情况.一般可以连接外网的时候我们直接使用 yum 进行安装,可以为我们解决依赖包关系,但是很多工作环境下是没有外网的,内网情况下 ...

  9. 漏洞复现-ActiveMq反序列化漏洞(CVE-2015-5254)

          0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场) 0x01 影响版本 Apache ActiveMQ 5.13.0之前 ...

  10. Git代码分支开发工作流程

    本文的工作流程,有一个共同点:都采用"功能驱动式开发"(Feature-driven development,简称FDD). 它指的是,需求是开发的起点,先有需求再有功能分支(fe ...