首页 > 数据库 >「Python」参数化查询防止SQL注入攻击

「Python」参数化查询防止SQL注入攻击

时间:2023-07-11 17:13:59浏览次数:42  
标签:语句 img Python 查询 cursor 攻击 参数 SQL

import pymysql

# 1. 链接mysql

conn=pymysql.connect(
user='root',password="123",host='127.0.0.1',database='cars' # 需要去数据库创建表,无法在此创建
)

 

# 2. 获取一个游标
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
# 返回的查询结果以字典的形式表示,其中列名作为字典的键,对应的值为每行的数据。

 

# 3 执行sql语句

cursor.execute('insert into news (title,img,url,`desc`) values (%s,%s,%s,%s)',args=[title,img,url,desc]) # 这样不会有xss攻击

cursor.execute('insert into news (title,img,url,`desc`) values (%s,%s,%s,%s)'%(title,img,url,desc)) # 这样会有xss攻击

 

 

# 4 二次确认,除查询之外的都要用
conn.commit()

 

在数据库查询语句中,使用参数化查询(即将变量作为参数传递给查询语句)是一种推荐的做法,可以防止SQL注入攻击,并提高代码的安全性。

第一种方式使用参数化查询,即通过将参数传递给`execute`方法的`args`参数来替代查询语句中的占位符(`%s`)。这种方式会自动将参数进行适当的转义和编码,以防止潜在的XSS(跨站脚本)攻击。

而第二种方式是通过字符串插值的方式构建查询语句,将变量直接嵌入到查询语句中。这种方式容易受到XSS攻击,因为变量的值未经过转义或编码,可能包含恶意的脚本代码,从而导致安全漏洞。

总结来说,使用参数化查询可以提供更好的安全性,因为数据库驱动程序会自动处理参数的转义和编码,确保数据被正确地插入到数据库中,同时防止恶意注入攻击。而字符串插值的方式则需要自行处理转义和编码,容易出错且存在安全隐患。

为了防止XSS攻击,建议始终使用参数化查询或安全的查询构建方法,而不是直接将变量嵌入到查询语句中。

标签:语句,img,Python,查询,cursor,攻击,参数,SQL
From: https://www.cnblogs.com/10086upup/p/17545329.html

相关文章

  • 基于python的租房网站-房屋出租租赁系统(python+django+vue)
    该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为本学期的课程作业作品。欢迎大家提出宝贵建议。功能介绍平台采用B/S结构,后端采用主流的Python+Django进行开发,前端采用主流的Vue.js进行开发。整个平台包括前台和后台两个部分。前台功能包括:首页、房屋详情页、......
  • 基于python+django的酒店预定网站-酒店管理系统
    该系统是基于python+django开发的酒店预定管理系统。适用场景:大学生、课程作业、毕业设计。学习过程中,如遇问题可在github给作者留言。演示地址前台地址:http://hotel.gitapp.cn后台地址:http://hotel.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址h......
  • 基于python+django的外卖点餐网站-外卖点餐系统
    该系统是基于python+django开发的外卖点餐系统。适用场景:大学生、课程作业、毕业设计。学习过程中,如遇问题可以在github给作者留言。演示地址前台地址:http://food.gitapp.cn后台地址:http://food.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址https......
  • 动态SQL
     动态SQL指的是根据不同的查询条件,生成不同的Sql语句if、where、set、choose等在xml文件中以标签的形式存在where:多条件查询时,去除多余的andset:去除多余逗号trim:动态拼接时去除SQL的前缀、后缀prefix属性:拼接前缀suffix属性:拼接后缀prefixOverrides属性:......
  • MySQL DATE
    SQLDate函数一、SQL日期当我们处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配。只要数据包含的只是日期部分,运行查询就不会出问题。但是,如果涉及时间,情况就有点复杂了。在讨论日期查询的复杂性之前,我们先来看看最重要的内建日期处理函数。......
  • MySQL NULL 值判断
    MySQLNULL值判断IFNULL函数IFNULL(expr1,expr2)用法:假如expr1不为NULL,则IFNULL()的返回值为expr1;否则其返回值为expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。mysql>SELECTIFNULL(1,0);->1mysql>SELECTIFNULL(NULL,10);......
  • python基础day42
    针对表的SQL语句有表的前提是先有库什么是表?表相当于是文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段。ps:先有库selectdatabase() 查看当前所在的库usedb1;          选择库1.查看表showtables;sho......
  • 分组查询时,select的字段是否一定要都在group by中
    分组查询时,select的字段是否一定要都在groupby中?分组查询关键字groupby通常和集合函数(MAX、MIN、COUNT、SUM、AVG)一起使用,它可以对一列或者多列结果集进行分组。例如要统计超市水果的种类,需要用count函数,要统计哪个水果价格最高,要用MAX()函数。一般情况下,我们在使用groupby的......
  • 基于python+django的宠物商店-宠物管理系统设计与实现
    该系统是基于python+django开发的宠物商店-宠物管理系统。是给师妹开发的课程作业。现将源码开放给大家。大家学习过程中,如遇问题可以在github咨询作者。演示地址前台地址:http://pet.gitapp.cn后台地址:http://pet.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin12......
  • 基于python+django的家教预约网站-家教信息管理系统设计与实现
    该系统是基于python+django开发的家教预约网站。是给师妹做的课程作业。大家在学习过程中,遇到问题可以在github给作者留言。效果演示前台地址:http://jiajiao.gitapp.cn后台地址:http://jiajiao.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址https:......