SQL注入攻击

1.用java实现登录的检查

package jdbc1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

public class Login {
    public static void main(String args[]){
        try(Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306","root","020809");
            Statement statement=connection.createStatement();
            Scanner scanner=new Scanner(System.in);){
            ResultSet resultSet = statement.executeQuery("select * from accounting_ledger.user where username='"+scanner.nextLine()+"'and password='"+scanner.nextLine()+"';");
            while(resultSet.next()){
                String name = resultSet.getString(1);
                System.out.println(name+"login successfully!");
                }
            }catch(Exception e){
            e.printStackTrace();
        }
    }
}

2.注入攻击

看似没有问题,可是如果我输入的如果是以下内容呢?

Test
1111' or 1=1; -- 

这是因为我们实际运行的sql语句变成了

select * from user where username='Test' and pwd='1111' or 1=1; -- '

而1=1一定是对的,所以这个语句一定是正确的。我们发现,如果允许这样的数据插入,那么我们原有的SQL语句结构就遭到了破坏,使得用户能够随意登陆别人的账号。因此我们可能需要限制用户的输入来防止用户输入一些SQL语句关键字,但是关键字非常多,这并不是解决问题的最好办法。

PreparedStatement

package jdbc1;

import java.sql.*;
import java.util.Scanner;

public class safeLogin {
    public static void main(String args[]){
        try(Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306","root","020809");
            PreparedStatement statement = connection.prepareStatement("select * from user where username= ? and password=?;");
            Scanner scanner=new Scanner(System.in)){
            statement.setString(1, scanner.nextLine());
            statement.setString(2, scanner.nextLine());
            System.out.println(statement);    //打印查看一下最终执行的
            ResultSet resultSet = statement.executeQuery();
            while(resultSet.next()){
                String name = resultSet.getString(1);
                System.out.println(name+"login successfully!");
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

我们发现,我们需要提前给到PreparedStatement一个SQL语句,并且使用?作为占位符,它会预编译一个SQL语句,通过直接将我们的内容进行替换的方式来填写数据。

而setString方法则会将读取的输入填入占位符的位置。第一个参数是传入的位置,第二个参数是传入的内容。

使用这种方式,我们之前的例子就失效了!我们来看看实际执行的SQL语句是什么: 

com.mysql.cj.jdbc.ClientPreparedStatement: select * from user where username= 'Test' and pwd='123456'' or 1=1; -- ';

我们发现,我们输入的参数一旦出现'时,会被变为转义形式\',而最外层有一个真正的'来将我们输入的内容进行包裹,因此它能够有效地防止SQL注入攻击! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/316611.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新型的变现和引流方式

AI 数字人短视频正成为一种新型的变现和引流方式。随着人工智能技术的不断发展,数字人技术也越来越成熟,为用户提供了更加逼真、生动的虚拟形象。通过AI 数字人短视频,用户可以创作出具有个性化特点的短视频内容,并将其发布在各大…

PLC控制脉冲轴绝对位置往复运动(三菱FX系列简单状态机编程)

有关状态机的具体介绍,专栏有很多文章,大家可以通过下面的链接查看: https://rxxw-control.blog.csdn.net/article/details/125488089https://rxxw-control.blog.csdn.net/article/details/125488089三菱FX系列回原功能块介绍 https://rxxw-control.blog.csdn.net/article…

在vue3和上挂载方法,以及在页面中怎么使用原型(公共)上的方法

//新建的项目的main.js文件是这样的 //main.js 文件 //befor import { createApp } from vue; import App from ./App.vue;const app createApp(App); app.mount(#app);以下例子用于解释在vue3.0的main.js中挂载公共的方法(foo) //main.js 文件 //afte…

51-11 多模态论文串讲—VLMo 论文精读

VLMo: Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts (NeurIPS 2022) VLMo 是一种多模态 Transformer 模型,从名字可以看得出来它是一种 Mixture-of-Modality-Experts (MoME),即混合多模态专家。怎么理解呢?主流 …

解决ELK日志收集中Logstash报错的关键步

ElK执行日志收集的时候logstash报错: Failed to execute action {:action>LogStash::PipelineAction::Create/pipeline_id:main, :exception>“LogStash::ConfigurationError”, :message>“Expected one of [^\r\n], “\r”, “\n” at line 88, column 4…

【深度学习每日小知识】Overfitting 过拟合

过拟合是机器学习(ML)中的常见问题,是指模型过于复杂,泛化能力较差的场景。当模型在有限数量的数据上进行训练,并且学习了特定于该特定数据集的模式,而不是适用于新的、看不见的数据的一般模式时&#xff0…

不用下载就可以使用的三个在线抠图网站

字图像处理技术的发展,抠图已经成为一项重要的技术。在许多情况下,我们需要将图片中的某一部分抠出来,例如将人物从背景中抠出,或者将产品从图片中抠出。传统的抠图方法需要使用专业的图像处理软件,如Photoshop等&…

22k+stars centos轻松搭建网盘的神器

说明: 系统:centos7 64 ip:192.168.168.107 目录 1.下载 2.安装 3.启动 4.测试 1.下载 根据系统下载 wget https://github.com/filebrowser/filebrowser/releases/download/v2.27.0/linux-amd64-filebrowser.tar.gz 2.安装 tar -zxvf linux-amd64-filebrowser.tar.gz…

Linux限制用户可用硬盘空间

为了防止某个用户占用大量资源导致其他用户无法正常使用,一般会对单个用户可占用资源进行限制。就磁盘限额,XFS文件系统原生支持目录级别的限制。ext文件系统不支持目录限制,曲线方式是限制用户的总占用空间。 本文介绍使用quota程序限制用户…

有没有可以拖拉拽生成一个低代码平台?

据我所知,低代码平台都能拖拉拽生成。作为一组数字技术工具平台,它能基于图形化拖拽、参数化配置等更为高效的方式,实现快速构建、数据编排、连接生态、中台服务等。通过少量代码或不用代码实现数字化转型中的场景应用创新。 到底啥是低代码&…

网络——华为与华三

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆云计算学堂 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 写在前面 大家好,我是网络豆&#xff0…

10-skywalking告警

https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm.md 5.1:告警指标 ~$ vim /apps/apache-skywalking-apm-bin/config/oal/core.oal service_resp_time # 服务的响应时间 service_sla # 服务http请求成功率SLV,比…

渗透测试:保障网络安全的重要手段!

随着信息技术的快速发展,网络安全问题日益受到关注。渗透测试作为一种重要的网络安全检测和评估方法,已经成为保障网络安全的重要手段之一。本文将介绍渗透测试的基本概念、流程、以及在保障网络安全方面的应用。 一、渗透测试的基本概念 渗透测试是一…

机器学习第二十五周周报 ConvLSTM

文章目录 week 25 ConvLSTM摘要Abstract一、李宏毅机器学习二、文献阅读1. 题目2. abstract3. 网络架构3.1降水预报问题的建模3.2Convolutional LSTM3.3编码-预测结构 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1Moving-MNIST Dataset4.3.2雷达回波数据集 4.4 结论…

你真的读懂了“in”运算符吗?

in运算符用户判断属性是否存在于对象中。 语法 key in obj;参数 示例 var cars new Array(Toyota, Nissan, Mercedes, Buick, Porsche); 0 in cars; // true1 in cars; // true6 in cars; // falseMercedes in cars; // false(必须使用索引号,而不是…

点的旋转变换

情形一(active or alibi transformation主动变换) 在坐标系 x − y x-y x−y中,点 p 1 p_1 p1​逆时针旋转 α \alpha α后到达点 p 2 p_2 p2​。 p 1 p_1 p1​在 x − y x-y x−y中的表示与 p 2 p_2 p2​在 x ′ − y ′ x-y x′−y′中的表…

如何异地链接Pycharm服务器进行远程开发并实现与公司服务器资源同步

文章目录 一、前期准备1. 检查IDE版本是否支持2. 服务器需要开通SSH服务 二、Pycharm本地链接服务器测试1. 配置服务器python解释器 三、使用内网穿透实现异地链接服务器开发1. 服务器安装Cpolar2. 创建远程连接公网地址 四、使用固定TCP地址远程开发 本文主要介绍如何使用Pych…

Webm文件转MP4

WebM由Google提出,是一个开放、免费的媒体文件格式。WebM 影片格式其实是以 Matroska(即 MKV)容器格式为基础开发的新容器格式,里面包括了VP8影片轨和 Ogg Vorbis 音轨,其中Google将其拥有的VP8视频编码技术以类似BSD授…

Unity中URP下实现深度贴花(雾效支持和BRP适配)

文章目录 前言一、让我们的贴画支持雾效1、我们舍弃内部的MixFog方法2、使用 雾效混合因子 对最后输出颜色进行线性插值相乘 二、在Shader中,限制贴花纹理的采样方式1、申明 纹理 和 限制采样方式的采样器2、在片元着色器进行纹理采样 三、BRP适配1、C#脚本中&#…

算法——贪心法(Greedy)

贪心法 把整个问题分解成多个步骤,在每个步骤都选取当前步骤的最优方案,直到所有步骤结束;在每一步都不考虑对后续步骤的影响,在后续步骤中也不再回头改变前面的选择。不足之处: 贪心算法并不能保证获得全局最优解&…