0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python与数据库交互之MySQL是什么

汽车电子技术 来源:Python数据分析之旅 作者:cauwfq 2023-02-24 14:42 次阅读

一.项目背景

本项目主要是通过SQL注入案例来让大家了解如何防范SQL攻击,希望对大家有所帮助

pYYBAGP4W5KAYojtAADHKBDi0M4599.png

二.实现过程

》》创建数据表
》》插入数据
》》SQL注入
》》分析原因
mysql> use gzh;
Database changed
mysql> create table t_user(
    -> username varchar(120),
    -> password varchar(200))
    -> engine=innodb default charset=utf8;
Query OK, 0 rows affected, 1 warning (0.13 sec)


mysql> insert into t_user(username,password) values('Tom','1234acd'),('Alice','opqw362');
Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> select * from t_user;
+----------+----------+
| username | password |
+----------+----------+
| Tom      | 1234acd  |
| Alice    | opqw362  |
+----------+----------+
2 rows in set (0.00 sec)

注:数据库中总共有两条数据

pYYBAGP4W8SATC6DAACgt2l3BIM715.png
》》SQL注入

import mysql.connector
#配置数据库参数
config={
    "host":"localhost",
    "port":3306,
    "user":"root",
    "password":"253611",
    "database":"gzh",
    "auth_plugin":"mysql_native_password"
}
#初始化connect对象
con=mysql.connector.connect(**config)
#定义username
username="1 OR 1=1"
#定义password
password="1 OR 1=1"
#书写sql语句,AES_DECRYPT为解密函数
sql="SELECT COUNT(*) FROM t_user WHERE username=%s " 
    "AND AES_DECRYPT(UNHEX(password),'HelloWorld')=%s";
#初始化游标
cursor=con.cursor()
#执行SQL语句,字符串拼接生成
cursor.execute(sql%(username,password))
#输出数据
print("全部数据条数为:",cursor.fetchone()[0])
#关闭链接
con.close()

总结:
》》cursor.execute(sql%(username,password))通过字符串拼接生成SQL语句
》》由下图可知,我们SQL注入已经成功,设想如果是delete语句会带来巨大风险
》》原因:SQL语句是解释性语言,在拼接SQL语句时,容易被注入恶意的SQL语句

poYBAGP4W-OAbaRkAABSjilYVrk181.png

三.防范SQL注入

预编译机制
》》解释:预编译SQL语句就是数据库提前把SQL语句编译成二进制,这样反复执行同一条SQL语句的效率会提升
》》原理:SQL语句编译过程中,关键字已经被解析过了,所以向编译后的SQL语句传入参数,都会被当作字符串
处理,数据库不会解析其中注入的SQL语句

执行过程图

poYBAGP4W_6AXddPAAAu21zl4hQ698.png
import mysql.connector


config={
    "host":"localhost",
    "port":3306,
    "user":"root",
    "password":"253611",
    "database":"gzh",
    "auth_plugin":"mysql_native_password"
}
#初始化connect对象
con=mysql.connector.connect(**config)
#定义username
username="1 OR 1=1"
#定义password
password="1 OR 1=1"
#书写sql语句
sql="SELECT COUNT(*) FROM t_user WHERE username=%s " 
    "AND AES_DECRYPT(UNHEX(password),'HelloWorld')=%s";
#初始化游标
cursor=con.cursor()
#执行SQL语句,这里sql为预编译后的语句
cursor.execute(sql,(username,password))
#输出数据
print("全部数据条数为:",cursor.fetchone()[0])
#关闭链接
con.close()

总结:
》》cursor.execute(sql,(username,password))通过预编译后二进制执行
》》由下图可知,我们防范SQL注入已经成功

poYBAGP4XBeAbJWiAABcs0eTZGo703.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    764

    浏览量

    44152
  • 防范
    +关注

    关注

    0

    文章

    4

    浏览量

    7129
收藏 人收藏

    评论

    相关推荐

    python实战数据库MySQL---4操作MySQL

    变量没有默认值,所以,每个空都要填写。实现数据库之前,需要实现数据MySQL的安装配置,这些网上到处是例程,大家自行参考。还有要先创建数据库“test”,可以用
    发表于 01-09 21:21

    MySQL数据库python模块安装

    ORM:orm(Object Relation Mapping 对象关系映射) 定义:把对象模型映射到MySQL数据库
    发表于 08-05 08:41

    Python操作Mysql实现数据库脚本的方法概述

    Python操作Mysql数据库脚本(cmd)
    发表于 10-08 10:44

    PythonMySQL使用

    Python入门】43数据库 使用MySQL
    发表于 04-07 16:20

    Python连接MySQL数据库及模块封装

    python连接mysql与sql server数据库及相应的模块封装
    发表于 05-01 16:06

    python数据库交互

    python数据库交互-sqlalchemy
    发表于 05-01 14:50

    python如何连接MySql数据库

    Python入门(python连接MySql数据库)还能怎么记,大开眼界!
    发表于 06-14 07:48

    如何使用Python操作MySQL数据库

    使用Python进行MySQL主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy。
    的头像 发表于 12-15 09:51 3791次阅读

    PHP与MYSQL数据库如何进行交互详细方法实验说明

    本文档的主要内容详细介绍的是PHP与MYSQL数据库如何进行交互详细方法实验说明。一、【实验目的】1. 掌握PHP提供的各种函数与MYSQL数据库
    发表于 06-13 16:58 13次下载

    华为云数据库-RDS for MySQL数据库

    华为云数据库-RDS for MySQL数据库 华为云数据库作为华为云的一款数据库产品,它主要是以MyS
    的头像 发表于 10-27 11:06 1528次阅读

    python读取数据库数据 python查询数据库 python数据库连接

    使用第三方,包括MySQLDB、sqlite3、psycopg2等。其中MySQLDB是Python连接MySQL数据库的一个重要
    的头像 发表于 08-28 17:09 1835次阅读

    MySQL数据库管理与应用

    MySQL数据库管理与应用 MySQL是一种广泛使用的关系型数据库管理系统,被认为是最流行和最常见的开源数据库之一。它可以被用于多种不同的应
    的头像 发表于 08-28 17:15 977次阅读

    MySQL数据库基础知识

    MySQL 是一种开源的关系型数据库管理系统,它是目前最流行的数据库之一。MySQL 提供了一种结构化的方法来管理大量的数据,并且具有高效、
    的头像 发表于 11-21 11:09 973次阅读

    mysql数据库基础命令

    MySQL是一个流行的关系型数据库管理系统,经常用于存储、管理和操作数据。在本文中,我们将详细介绍MySQL的基础命令,并提供与每个命令相关的详细解释。 登录
    的头像 发表于 12-06 10:56 595次阅读

    数据库数据恢复—Mysql数据库表记录丢失的数据恢复流程

    Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、
    的头像 发表于 12-16 11:05 167次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—<b class='flag-5'>Mysql</b><b class='flag-5'>数据库</b>表记录丢失的<b class='flag-5'>数据</b>恢复流程