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. 玩遍博客网站,我整理了 Hugo 及其流行的风格主题

    搭建博客网站是个人进入互联网世界的最常见方式之一.伴随着网站技术的发展,如何搭建博客网站已经变得非常容易了.当然,你可以选择诸如 新浪博客.CSDN.博客园 之类的大型网站,快速创建依赖于大平台的个人 ...

  2. MySQL学习笔记(五)

    倒数第二天!冲冲冲!!! 一.索引 一个表里面可以有多个索引. 1. 索引的作用:约束与加速查找 无索引:从前到后依次查找 有索引:会为索引列创造一个额外文件(以某种格式存储).在使用索引进行查找时, ...

  3. JavaFX桌面应用-版本升级

    好久没有写博客,2021年就以 "JavaFX桌面应用-版本升级" 开篇吧,记录一下JavaFX应用版本升级的开发流程. 桌面应用升级的方案应该很多,这里只是自己想到的方案. 1. ...

  4. 箭头函数this的指向

    箭头函数的this 什么是箭头函数,箭头函数是es6的新特性,其出现就是为了更好的表示(代替)回调函数 // 箭头函数 (arg1, arg2) => {} // 当箭头函数只有一个参数 arg ...

  5. CSharp使用ANTLR4生成简单计算Parser

    ANTLR简介 ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, pr ...

  6. 使用ASP.NET Blazor Server 写混合桌面程序的疯狂想法

    开发本地桌面程序,使用进程内浏览器+进程内BLAZOR服务器,然后任性写功能,自由分发,放飞自我,大家看怎么样? 求评估,求批评 https://github.com/congzhangzh/desk ...

  7. 普通的一天,说一个普通的XML

    什么是XML XML全称是Extensible Markup Language,译为"可扩展标记语言",常用来存储和传输信息. XML的结构 我们经常看到的XML文件是这个样子的: ...

  8. 漏洞复现-Bash之一键破壳

        注:使用docker搭建测试环境 (1)访问搭建的环境网址:http://192.168.11.101:8081/ (2)使用burp拦截数据包,并修改User-Agent的内容: (3)使用 ...

  9. Windows-Redis占用C盘系统空间

    发现redis在电脑死机蓝屏的情况下,就是非正常退出redis会导致redis的缓存文件不会回收,占用系统空间, 下次在启动的时候,会再次创建一个10G多的缓存文件,极度占用磁盘空间. 现说明解决办法 ...

  10. Learn Python the Hard Way,ex37-2

    本练习为复习python的符号和关键字 数据类型有:True False None Strings numbers floats lists dict tuple set ""&q ...