C++ 输入用户名和密码 防止注入攻击

1、问题解释:注入攻击 ,无密码直接登录数据库

可视化展示

1.1、当你的数据库为:其中包含三个字段id user 以及md5密码

 1.2、在使用C++堆数据库信息进行访问的时候,使用多条语句进行查询

string sql = "select id from t_user where user='";
        sql += username;
        sql += "' and password =md5('";
        sql += password;
        sql += "')";
        cout << sql << endl;

1.3、sql语句最终输出为,展示数据库如下。

select id from t_user where user='fdd' and password =md5('990107Wjl@')

1.4、那么如果一些人想要违法查看你的数据,他们直接插入语句,生成一个密码

select md5(1);

1.5、在C++编程中,输入如下代码,就可以查看你的数据库的任意信息,所以说是很危险的。

select id from t_user where user = '1'or '1'='1' and password = md5('1') or'c4ca4238a0b923820dcc509a6f75849b'=md5('1');

 在Linux下,也攻击成功了,十分危险

input password : ***********************************************select id from t_user where user = '1' or '1' = '1' and password = md5('1') or 'c4ca4238a0b923820dcc509a6f75849b' = md5('1')
            login success!

 2、解决思路

        2.1、解决1:使用独立用户,设定权限,限制用户的权限,不用root用户,只给只读权限
        2.2、解决2:用预处理语句(比较麻烦stmt)
        2.3检查用户的输入   

3、本博客主要讲解第三种方法:检查用户的输入

3.1、从如下代码可以查看

select id from t_user where user = '1'or '1'='1' and password = md5('1') or'c4ca4238a0b923820dcc509a6f75849b'=md5('1');

 username=1'or'1'='1

 password= 1') or'c4ca4238a0b923820dcc509a6f75849b'=md5('1

发现攻击密码包含引号,等于号以及括号,所以解决的话就不可以有'',不可以有= 不可以有)

3.2、写一个函数,检查用户的输入

//用于检查用户的输入  false不安全。 true表示安全
bool XClient::CheckInput(const std::string& in)
{
    //限定不允许出现的字符
    string str = "'\"()";
    for (char a : str)
    {
        //size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数。
        size_t found = in.find(a);
        //输入字符in是否可以在a中被找到
        //如果字符串不存在包含关系,那么返回值就一定是npos
        if (found != string::npos)//发现违规字符
        {
            return false;
        }
    }
    return true;
}
       if (!CheckInput(password) || !CheckInput(username))
        {
            //输入是危险的
            cerr << "Injection attacks!!!! Inout password or username dangerous!!" << endl;
            continue;
        }

 4、测试:Linux

直接输出注入攻击错误
input username:1'or'1'='1
input password:***********************************************Injection attacks!!!! Inout password or username dangerous!!

完结花花

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

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

相关文章

Unity Shader 属性的定义

Unity Shader 属性的定义 什么是材质球 人的衣服 什么是shader 决定材质跟灯光的作用 Property 若是把shader看作class&#xff0c;那么Property就可以看成成员变量 属性定义的通用格式 Properites{ Property[Property…] } ep:定义一个int&#xff1a; name("dis…

YOLOv5模型转ONNX,ONNX转TensorRT Engine

系列文章目录 第一章 YOLOv5模型训练集标注、训练流程 第二章 YOLOv5模型转ONNX,ONNX转TensorRT Engine 第三章 TensorRT量化 文章目录 系列文章目录前言一、yolov5模型导出ONNX1.1 工作机制1.2 修改yolov5代码&#xff0c;输出ONNX 二、TensorRT部署2.1 模型部署2.2 模型推理…

【深度学习每日小知识】Computer Vision 计算机视觉

计算机视觉是人工智能的一个领域&#xff0c;涉及算法和系统的开发&#xff0c;使计算机能够解释、理解和分析来自周围世界的视觉数据。这包括从静态图像到视频流甚至 3D 环境的一切。 使用对象检测和特征提取等方法&#xff0c;计算机视觉本质上需要从视觉输入中提取有用信息…

TensorRT(C++)基础代码解析

TensorRT(C)基础代码解析 文章目录 TensorRT(C)基础代码解析前言一、TensorRT工作流程二、C API2.1 构建阶段2.1.1 创建builder2.1.2 创建网络定义2.1.3 定义网络结构2.1.4 定义网络输入输出2.1.5 配置参数2.1.6 生成Engine2.1.7 保存为模型文件2.1.8 释放资源 2.2 运行期2.2.1…

STM32的USB设备库

适用范围&#xff1a;“on the STM32F10xxx,STM32F37xxx, STM32F30xxx and STM32L15xxx devices.” STM32_USB-FS-Device_Lib_V4.0.0.rar&#xff08;访问密码&#xff1a;1666&#xff09;https://url48.ctfile.com/f/33868548-1000799917-a5409d?p1666 适用范围&#xff1…

服务器配置SSL证书到nginx基于Fdfs存储服务器或者直接阿里云绑定SSL

1.如果用FDFS存储服务器内置nginx设置SSL证书 1.验证当前nginx是否存在 http_ssl_modulehttp_ssl_module模块 如果存在直接配置就行 server {listen 80 default backlog2048;listen 443 ssl; server_name 域名; ssl_certificate /usr/local/nginx_fdfs/ssl/xxxx.top.crt; ssl…

【C++】内联函数

前言 在C语言中&#xff0c;我们学习过宏的用法。宏通常被用于进行简单的文本替换来执行一系列的操作&#xff0c;比如一些简单的运算。使用宏可以避免函数调用时建立栈帧的开销&#xff0c;提高程序的性能。我们首先来写一个实现加法功能的宏&#xff1a; #define ADD(x, y)…

5、C语言:结构

结构 结构的基本知识结构与函数传递结构 结构数组、指向结构的指针自引用结构&#xff08;二叉树&#xff09;表查找类型定义&#xff08;typedef&#xff09;联合位字段 结构也是一种数据类型。类似于int、char、double、float等。 结构是一个或多个变量的集合&#xff0c;这些…

Linux系统——远程访问及控制

目录 一、OpenSSH服务器 1.SSH&#xff08;Secure Shell&#xff09;协议 2.OpenSSH 2.SSH原理 2.1公钥传输原理 2.2加密原理 &#xff08;1&#xff09;对称加密 &#xff08;2&#xff09;非对称加密 2.3远程登录 2.3.1延伸 2.3.2登录用户 3.SSH格式及选项 3.1延…

node(express.js创建项目)+连接mysql数据库

1.node npm的安装 2.express的安装 全局安装:npm install express -gnpm install -g express-generator// ps: 4.0版本把generator分离出来了&#xff0c;需要单独安装3.创建express项目 express 项目名称 cd 项目名称 npm install npm start4.项目中安装数据库 npm install…

Python读取log文件报错“UnicodeDecodeError”

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 写了一个读取log文件的Python脚本&#xff1a; # -*- coding:utf-8 -*- import os import numpy as np …

第01章_Java语言概述拓展练习(为什么要设置path?)

文章目录 第01章_Java语言概述拓展练习1、System.out.println()和System.out.print()有什么区别&#xff1f;2、一个".java"源文件中是否可以包括多个类&#xff1f;有什么限制&#xff1f;3、Something类的文件名叫OtherThing.java是否可以&#xff1f;4、为什么要设…

【Maven】009-Maven 简单父子工程搭建

【Maven】009-Maven 简单父子工程搭建 文章目录 【Maven】009-Maven 简单父子工程搭建一、需求说明1、结构2、第三方库 二、工程搭建1、父工程第一步&#xff1a;创建父工程第二步&#xff1a;引入公共依赖 lombok 和管理 hutool 依赖版本 2、公共子模块第一步&#xff1a;创建…

服务器出现500、502、503错误的原因以及解决方法

服务器我们经常会遇到访问不了的情况有的时候是因为我们服务器被入侵了所以访问不了&#xff0c;有的时候是因为出现了服务器配置问题&#xff0c;或者软硬件出现问题导致的无法访问的问题&#xff0c;这时候会出现500、502、503等错误代码。基于以上问题我们第一步可以先重启服…

MySQL核心SQL

一.结构化查询语言 SQL是结构化查询语言&#xff08;Structure Query Language&#xff09;&#xff0c;它是关系型数据库的通用语言。 SQL 主要可以划分为以下 3 个类别&#xff1a; DDL&#xff08;Data Definition Languages&#xff09;语句 数据定义语言&#xff0c;这…

vue2配置教程

5.12.3 Vue Cli 文档地址: https://cli.vuejs.org/zh/ IDEA 打开项目&#xff0c;运行项目

【年终总结】回首2023的精彩,迈向2024的未来

文章目录 一、历历在目&#xff0c;回首成长之路&#x1f3c3;‍1、坚持输出&#xff0c;分享所学2、积土成山&#xff0c;突破万粉3、不断精进&#xff0c;向外涉足 二、雅俗共赏&#xff0c;阅历百般美好&#x1f3bb;1、音乐之声&#xff0c;声声入耳2、书海遨游&#xff0c…

select...for update锁详解

select…for update锁详解 select…for update的作用就是&#xff1a;如果A事务中执行了select…for update&#xff0c;那么在其提交或回滚事务之前&#xff0c;B&#xff0c;C&#xff0c;D…事务是无法操作&#xff08;写&#xff09;A事务select…for update所命中的数据的…

php时间函数date()、getdate()、time()

目录 1. 时区修改 2. date() 3. getdate() 4. time() 1. 时区修改 位于东八区&#xff0c;修改php.ini 。date.timezone Asia/Shanghai 2. date() 获取时间函数 <?php header("Content-Type: text/html; charsetutf-8");$d date(H:i:s);//小时H&#xf…

linux驱动(五):framebuffer

本文主要探讨210的framebuffer驱动知识。 frameBuffer 用户态进程直接调用显卡写屏,framebuffer接口是给用户态进程用于写屏 framebuffer设备文件为fbx 清屏:dd if/dev/zero of/dev/fbx 清屏&#xff1a;$ dd if/dev/zero of/dev/fb0 bs1024 …