-
什么是sql注入
用户提交带有恶意数据与sql语句进行字符串方式的拼接,从而影响了sql语句的语义,最终产生数据泄露的现象
示例
# 1. 导包
import pymysql
?
if __name__ == ‘__main__‘:
?
# 2. 创建连接对象
# connect = Connection = Connect 本质上是一个函数,使用这三个里面的任何一个函数都可以创建一个连接对象
# 1. host : 服务器的主机地址
# 2. port: mysql数据库的端口号
# 3. user: 用户名
# 4. password:密码
# 5. database: 操作的数据库
# 6. charset: 操作数据库使用的编码格式
conn = pymysql.connect(host="localhost",
port=3306,
user="root",
password="mysql",
database="python41",
charset="utf8")
?
# 3. 获取游标, 目的就是要执行sql语句
cursor = conn.cursor()
# 准备sql, 之前在mysql客户端如何编写sql,在python程序里面还怎么编写
sql = "select * from students where name = ‘%s‘;" % "黄蓉‘ or 1 = 1 or ‘"
print(sql)
?
# 4. 执行sql语句
cursor.execute(sql)
?
# 获取查询的结果, 返回的数据类型是一个元组
# row = cursor.fetchone()
# print(row)
# 返回的数据类型是一个元组,其中元组里面的每条数据还是元组
result = cursor.fetchall()
for row in result:
print(row)
?
# 5. 关闭游标
cursor.close()
# 6. 关闭连接
conn.close() -
如何防止sql注入?
sql语句参数化
-
sql语言中的参数使用%s来占位,此处不是python中的字符串格式化操作
-
# 1. 导包
import pymysql
?
if __name__ == ‘__main__‘:
?
# 2. 创建连接对象
# connect = Connection = Connect 本质上是一个函数,使用这三个里面的任何一个函数都可以创建一个连接对象
# 1. host : 服务器的主机地址
# 2. port: mysql数据库的端口号
# 3. user: 用户名
# 4. password:密码
# 5. database: 操作的数据库
# 6. charset: 操作数据库使用的编码格式
conn = pymysql.connect(host="localhost",
port=3306,
user="root",
password="mysql",
database="python41",
charset="utf8")
?
# 3. 获取游标, 目的就是要执行sql语句
cursor = conn.cursor()
# 准备sql, 使用防止sql注入的sql语句, %s是sql语句的参数和字符串里面的%s不一样,不要加上引号
sql = "select * from students where name = %s;"
print(sql)
?
# 4. 执行sql语句
cursor.execute(sql,("黄蓉",))
?
# 获取查询的结果, 返回的数据类型是一个元组
# row = cursor.fetchone()
# print(row)
# 返回的数据类型是一个元组,其中元组里面的每条数据还是元组
result = cursor.fetchall()
for row in result:
print(row)
?
# 5. 关闭游标
cursor.close()
# 6. 关闭连接
conn.close() -
-
相关文章
- 05-18SQL在数据处理过程中,遇到除数为0该怎么办?
- 05-18SQL语句将两个select语句查询结果合并一个
- 05-18从"UDF不应有状态" 切入来剖析Flink SQL代码生成
- 05-18SQL 无法解决 EQUAL TO 运算中 "CHINESE_PRC_CI_AS" 和 "CHINESE_PRC_90_CI_AI" 之间的排序规则冲突
- 05-18sql中,In和where的区别
- 05-18【入门推荐】SQL注入进行WebShell渗透测试的基础概览
- 05-18SQL篇 语句练习 难度(中等)
- 05-18达梦数据库DM8开启sql日志
- 05-18SQL基础知识V2——JOIN连接
- 05-18sql等值连接,左右连接