笔记:Python防止SQL注入
非安全的方式,使用动态拼接SQL
输入' or 1 = 1 or '1
sql ="""SELECT * FROM goods WHERE name = '%s';""" % find_name
from pymysql import connect
class JD(object):
def __init__(self):
# 创建connect连接
self.conn = connect(host='127.0.0.1', port=3306, user='root',
password='123456', database='jing_dong', charset='utf8')
# 获得cursor对象
self.cursor = self.conn.cursor()
def execute_sql(self, sql):
self.cursor.execute(sql)
for temp in self.cursor.fetchall():
print(temp)
def get_info_by_name(self):
"""根据名字查询一个商品"""
find_name = input('请输入想要查询的商品名称: ')
sql = """SELECT * FROM goods where name = '%s'""" % find_name
# 打印拼接出的字符串
print('------>%s<------' % sql)
self.execute_sql(sql)
@staticmethod
def print_menu():
print('-----京东-----')
print('1.查询商品信息')
return input('请输入功能对应的序号: ')
def run(self):
while True:
op = self.print_menu()
if op == '1':
self.get_info_by_name()
else:
print('输入错误...')
def main():
jd = JD()
jd.run()
if __name__ == '__main__':
main()
SQL注入执行效果

因为使用动态拼接SQL,所以在应该输入的地方拼接了' or 1 = 1 or '1,打印出来的SQL为SELECT * FROM goods where name = '' or 1=1 or'1',SQL恒真,相当于where条件失效,等价于SELECT * FROM goods,导致整表的数据被查询出来。
安全的方式,构造参数列表
params = []
sql = 'SELECT * FROM goods where name = %s'
self.cursor.execute(sql, params)
from pymysql import connect
class JD(object):
def __init__(self):
# 创建connect连接
self.conn = connect(host='127.0.0.1', port=3306, user='root',
password='123456', database='jing_dong', charset='utf8')
# 获得cursor对象
self.cursor = self.conn.cursor()
def execute_sql(self, sql):
self.cursor.execute(sql)
for temp in self.cursor.fetchall():
print(temp)
def get_info_by_name(self):
"""根据名字查询一个商品"""
find_name = input('请输入想要查询的商品名称: ')
params = [find_name]
sql = 'SELECT * FROM goods where name = %s'
self.cursor.execute(sql, params)
print(self.cursor.fetchall())
print('------>%s<------' % sql)
@staticmethod
def print_menu():
print('-----京东-----')
print('1.查询商品信息')
return input('请输入功能对应的序号: ')
def run(self):
while True:
op = self.print_menu()
if op == '1':
self.get_info_by_name()
else:
print('输入错误...')
def main():
jd = JD()
jd.run()
if __name__ == '__main__':
main()
SQL注入执行效果

注意:如果要有多个参数,需要进行参数化。
params = [数值1, 数值2...],此时SQL语句要有多个%s
笔记:Python防止SQL注入的更多相关文章
- python防止sql注入的方法
python防止sql注入的方法: 1. 使用cursor.execute(sql, args)的参数位: sql_str = "select * from py_msgcontrol.py ...
- Python防止sql注入
看了网上文章,说的都挺好的,给cursor.execute传递格式串和参数,就能防止注入,但是我写了代码,却死活跑不通,怀疑自己用了一个假的python 最后,发现原因可能是不同的数据库,对于字符串的 ...
- java学习笔记38(sql注入攻击及解决方法)
上一篇我们写了jdbc工具类:JDBCUtils ,在这里我们使用该工具类来连接数据库, 在之前我们使用 Statement接口下的executeQuery(sql)方法来执行搜索语句,但是这个接口并 ...
- python 防止sql注入字符串拼接的正确用法
在使用pymysql模块时,在使用字符串拼接的注意事项错误用法1 sql='select * from where id="%d" and name="%s" ...
- Python 防止mysql 注入的两种方式
Python防止sql注入一般有两种方法 1.escape_string MySQLdb.escape_string(param) 注意:如果报错出现 'ascii' codec can't en ...
- 视图,sql注入问题,事物,存储过程
视图:本质是一张虚拟的表数据来自select语句用途是保障原表安全 功能1:隐藏部分数据,开放指定数据功能2:因为视图可以将查询结果保存的特性,我们可以用视图来达到减少书写sql语句的功能 例如:se ...
- 干货 | 精选《SQL注入、渗透、反病毒》学习总结集锦给你们~
学到手的都是本事,如果觉得对你有帮助也欢迎分享给身边的基友们吧! 分享干货,手留余香哦~ 本次“开学季拜师活动”的徒弟们在师父的精心指导下,在短短5天内得到了迅速地成长,以前或当时遇到的问题都能够柳暗 ...
- 使用C#winform编写渗透测试工具--SQL注入
使用C#winform编写渗透测试工具--SQL注入 本篇文章主要介绍使用C#winform编写渗透测试工具,实现SQL注入的功能.使用python编写SQL注入脚本,基于get显错注入的方式进行数据 ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- 剑指offer——66翻转字符串
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“student ...
- hdu5421 Victor and String 回文树(前后插入)
题目传送门 题意:对一个字符串支持四种操作,前插入字符,后插入字符,询问本质不同的回文串数量和所有回文串的数量. 思路: 就是在普通回文树的基础上,维护suf(最长回文后缀)的同时再维护一个pre(最 ...
- pandas-索引
一.按列取.按索引/行取.按特定行取 import numpy as np from pandas import DataFrame import pandas as pd df=DataFrame( ...
- mfc中的_T
mfc 中的字符串表示常用_T,意为text,定义为宏定义,可以方便的定义所有字符串为UNICODE(16位,长字符)或者ANSI(8位,短字符). 如果对于所有的字符串定义了_T并且定义了预处理标志 ...
- 请问在一个固定div大小里面,图片右移动,超出div容器的图片给隐藏,怎么设定?
如图,让图片移动,溢出的图片被隐藏,怎么设置? overflow: hidden;
- leetcode -有效的字母异位词 python&C++
C++解题代码: class Solutiion { public: bool isAnagram(string s, string t) { ](); int n = s.length(); int ...
- 解析Spring第四天(Spring中的事物、Spring框架来管理模板类)
JDBC模板技术: Spring框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单 template 模板 都是Spring框架提供XxxTemplate 提供了JDBC模板,Sp ...
- hdu多校第八场 1010(hdu6666) Quailty and CCPC 排序/签到
题意: CCPC前10%能得金牌,给定队伍解题数和罚时,问你有没有一个队伍如果向上取整就金了,四舍五入就银了. 题解: 排序后按题意求解即可. #include<iostream> #in ...
- Python-爬虫-HTTP协议请求之GET请求
我们在百度搜索时,输入关键词,比如“hello”,URL发生变化,如下: https://www.baidu.com/s?wd=hello&rsv_spt=1&rsv_iqid=0xf ...
- 修改linux默认语言
linux修改默认语言 编辑/etc/sysconfig/i18n这个文件(不存在就新建一个),原内容如下: LANG="en_US.UTF-8" SYSFONT=" ...