非安全的方式,使用动态拼接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注入的更多相关文章

  1. python防止sql注入的方法

    python防止sql注入的方法: 1. 使用cursor.execute(sql, args)的参数位: sql_str = "select * from py_msgcontrol.py ...

  2. Python防止sql注入

    看了网上文章,说的都挺好的,给cursor.execute传递格式串和参数,就能防止注入,但是我写了代码,却死活跑不通,怀疑自己用了一个假的python 最后,发现原因可能是不同的数据库,对于字符串的 ...

  3. java学习笔记38(sql注入攻击及解决方法)

    上一篇我们写了jdbc工具类:JDBCUtils ,在这里我们使用该工具类来连接数据库, 在之前我们使用 Statement接口下的executeQuery(sql)方法来执行搜索语句,但是这个接口并 ...

  4. python 防止sql注入字符串拼接的正确用法

    在使用pymysql模块时,在使用字符串拼接的注意事项错误用法1 sql='select * from where id="%d" and name="%s" ...

  5. Python 防止mysql 注入的两种方式

    Python防止sql注入一般有两种方法 1.escape_string   MySQLdb.escape_string(param) 注意:如果报错出现 'ascii' codec can't en ...

  6. 视图,sql注入问题,事物,存储过程

    视图:本质是一张虚拟的表数据来自select语句用途是保障原表安全 功能1:隐藏部分数据,开放指定数据功能2:因为视图可以将查询结果保存的特性,我们可以用视图来达到减少书写sql语句的功能 例如:se ...

  7. 干货 | 精选《SQL注入、渗透、反病毒》学习总结集锦给你们~

    学到手的都是本事,如果觉得对你有帮助也欢迎分享给身边的基友们吧! 分享干货,手留余香哦~ 本次“开学季拜师活动”的徒弟们在师父的精心指导下,在短短5天内得到了迅速地成长,以前或当时遇到的问题都能够柳暗 ...

  8. 使用C#winform编写渗透测试工具--SQL注入

    使用C#winform编写渗透测试工具--SQL注入 本篇文章主要介绍使用C#winform编写渗透测试工具,实现SQL注入的功能.使用python编写SQL注入脚本,基于get显错注入的方式进行数据 ...

  9. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. 第九篇 数据表设计和保存item到json文件

    上节说到Pipeline会拦截item,根据设置的优先级,item会依次经过这些Pipeline,所以可以通过Pipeline来保存文件到json.数据库等等. 下面是自定义json #存储item到 ...

  2. Apache版hadoop编译

    前言  做为大数据入门的基础,hadoop是每个大数据开发人员几乎不可避免的基础,目前hadoop已经发展到3.x.x版本,但当前企业使用的主流还是2.x.x版本,hadoop官网提供了编译后的had ...

  3. mac下Python安装路径的说明

    Python安装路径的说明 mac在安装Python时, 对不同的安装方式 不同的型号均会安装在不同的文件夹下 安装方式 路径 系统默认(2.7) /System/Library/Frameworks ...

  4. 微信小程序中实现左右滑动图片翻页

    页面代码 <swiper class="container" indicator-dots="{{indicatordots}}" autoplay=&q ...

  5. Pregel Worker

  6. Linux 网络 tcp C/S通信模型

    C/S模型就是server 与 client 的模型 TCP服务器模型流程图                                                              ...

  7. GYM 101933E 状态压缩 + 记忆化搜索

    题意:我方有n个士兵,敌方有m个,每方士兵都有一个血量,现在有k轮无差别炮火打击,每次都会从存活的士兵中随机选一人,这名士兵的HP就-1,问对方被团灭的概率有多大? 思路:因为n和m的范围很小,我们可 ...

  8. jq-demo-2种吸顶效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 继承中的隐藏(hide)重写(Override)和多态(Polymorphism)

    继承中的隐藏:(不要使用隐藏,语法没有错误但是开发项目时会被视为错误) 在继承类中完全保留基类中的函数名 //基类,交通工具 class Vehicle { public void Run() { C ...

  10. springMVC快速入门 共分为五步

    springMVC快速入门 共分为5步分别为: 1 导入依赖 ​​ 2 spring-mvc.xml 配置 ​ 3 web.xml配置 ​ 4 自定义一个核心控制类 ​ 5 页面配置 详细步骤以及代码 ...