非安全的方式,使用动态拼接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. 1. Python版本的选择与安装

    Python综述 Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python是一种解释型.面向对象.动态数据类型的高级程序设计语言,它具有卓越的通 ...

  2. swiper 窗口宽度变化,页面宽度高度变化 导致自动滑动 解决方案

    又又又又是swiper问题 背景: pc端项目,rem布局,swiper作为步骤条(上一步,下一步)的功能. 发现在屏幕拖动,宽高的变化,窗口大小的变化 会引起swiper自动滑动(到下一步). 在下 ...

  3. Spring Boot整合Thymeleaf模板引擎

    什么是Thymeleaf Thymeleaf是一款用于渲染XML.XHTML.HTML5内容的模板引擎.类似Velocity,FreeMaker模板引擎,它也可以轻易的与Spring MVC等Web框 ...

  4. Spring IOC源码分析(一):ApplicationContext体系结构设计之自底向上分析

    spring-context包1. ApplicationContext接口 public interface ApplicationContext extends EnvironmentCapabl ...

  5. 不在B中的A的子串数量 HDU - 4416 (后缀自动机模板题目)

    题目: 给定一个字符串a,又给定一系列b字符串,求字符串a的子串不在b中出现的个数. 题解: 先将所有的查询串放入后缀自动机(每次将sam.last=1)(算出所有子串个数) 然后将母串放入后缀自动机 ...

  6. SYSTEM_HANDLE_TABLE_ENTRY_INFO

    typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO { USHORT UniqueProcessId; USHORT CreatorBackTraceInde ...

  7. 微信小程序开发之https服务器搭建三步曲

    本篇文章主要讲述3个方面的内容,如下: 1.SSL证书的获取 2.服务器 Nginx SSL 证书的配置. 3.如何兼容80端口和443端口以及为什么要同时兼容这两个端口. 1.SSL证书的获取 ht ...

  8. 微信小程序のwxs

    WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构. wxs可以说就是为了满足能在页面中使用js存在的,在wxml页面中,只能在插值{{ }}中写简单的j ...

  9. 【第二次个人作业】结对作业Core第一组:四则运算生成PB16061082+PB16120517

    [整体概况] 1.描述最终的代码的实现思路以及关键代码. 2.结对作业两个人配合的过程和两个人分工. 3.API接口文档和两个组的对接. 4.效能分析,优化分析和心得体会. [代码实现] 一. 实现功 ...

  10. 01_ESP8266 NONO_SDK 创建工程模板

    参考:https://wiki.ai-thinker.com/ai_ide_use  , 仅作为学习笔记. 一.关于报错 注意:Eclipse 只是一个代码编写工具,它并不能读取 makefile 里 ...