sql注入
Posted 小学生求教
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql注入相关的知识,希望对你有一定的参考价值。
-
什么是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() -
-
以上是关于sql注入的主要内容,如果未能解决你的问题,请参考以下文章