首页 > 数据库 >为什么python的数据库语句要用参数化构造的方式

为什么python的数据库语句要用参数化构造的方式

时间:2024-04-16 20:48:03浏览次数:18  
标签:语句 title python 数据库 tax item url price

以下是一个python的数据库插入语句

self.cur.execute('''
    INSERT INTO books (
        url, title, product_type, price_excl_tax, price_incl_tax, availability, num_reviews, rating, category, describe
    ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
''', (
    item['url'], item['title'], item['product_type'], item['price_excl_tax'], item['price_incl_tax'], item['availability'], item['num_reviews'], item['rating'], item['category'], item['describe']
))

为什么不使用似乎更简单的f-string

self.cur.execute(f'''
    INSERT INTO books (
        url, title, product_type, price_excl_tax, price_incl_tax, availability, num_reviews, rating, category, describe
    ) VALUES ({item['url']}, {item['title']}, ... )
''')

答案是为了防止SQL注入攻击,第二中方式如果遇到这样发语句

{
  "url": "' OR 1=1 --",
  "title": "Malicious Title",
  // 其他字段省略,保持正常值
}

那么sql语句就换变成

INSERT INTO books (
  url, title, product_type, price_excl_tax, price_incl_tax, availability, num_reviews, rating, category, describe
) VALUES (
  ''' OR 1=1 --', 'Malicious Title', ... 
)

单引号 ' 结束了原本的字符串字面值,并通过注释符号 -- 忽略了后面的语句。这里的 '' OR 1=1 是一个永远为真的布尔表达式,通过这种方式可以绕过url这个字段的有效性检查。
而前一种方式会检测输如字段的合规性,避免这种危险。

标签:语句,title,python,数据库,tax,item,url,price
From: https://www.cnblogs.com/ling-2945/p/18139125

相关文章

  • Effective Python:第3条 了解bytes与str的区别
    Python有两种类型可以表示字符序列:一种是bytes,另一种是str。bytes实例包含的是原始数据,即8位的无符号值(通常按照ASCII编码标准来显示)。str实例包含的是Unicode码点(codepoint,也叫作代码点)。注意点:1,bytes和str并不兼容。在传递字符序列的时候需要注意。a=b"h\x65llo"b="wo......
  • range函数python用法
    range函数python用法概述range()是python的一个内置函数,用来创建一个整数序列,常用于for循环中。理解range()的运用会对我们使用循环很有帮助。语法range函数语法格式如下:-start:序列的起始数值,默认从0开始-stop:序列结束的数值(不包含在序列中)-step:步长,默认为1参数说明......
  • python-函数参数的学习
    '''函数的参数实际上是实际参数传给形式参数的过程通用性更强,可以理解为一个模版'''#defadd(a,b):#a,b是形参#print(a+b)#add(2,3)#传递参数'''1.必选参数,定义了几个,就必须传几个'''#deffunb(a,b):#result=a-b#print(result)#funb......
  • Python 入门指南(四)
    原文:zh.annas-archive.org/md5/97bc15629f1b51a0671040c56db61b92译者:飞龙协议:CCBY-NC-SA4.0第十章:哈希和符号表我们之前看过列表,其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效。它们是整数,因此它们快速且易于操作。但是,它们并不总是对我们很有效。例如,......
  • Python 入门指南(五)
    原文:zh.annas-archive.org/md5/97bc15629f1b51a0671040c56db61b92译者:飞龙协议:CCBY-NC-SA4.0第十六章:Python中的对象因此,我们现在手头上有一个设计,并且准备将该设计转化为一个可工作的程序!当然,通常情况下不会这样。我们将在整本书中看到好的软件设计示例和提示,但我们的重......
  • Python 入门指南(六)
    原文:zh.annas-archive.org/md5/97bc15629f1b51a0671040c56db61b92译者:飞龙协议:CCBY-NC-SA4.0第十九章:何时使用面向对象编程在之前的章节中,我们已经涵盖了面向对象编程的许多定义特性。我们现在知道面向对象设计的原则和范例,并且我们已经涵盖了Python中面向对象编程的语......
  • Python 入门指南(七)
    原文:zh.annas-archive.org/md5/97bc15629f1b51a0671040c56db61b92译者:飞龙协议:CCBY-NC-SA4.0第二十二章:Python设计模式I在上一章中,我们简要介绍了设计模式,并介绍了迭代器模式,这是一个非常有用和常见的模式,以至于它已经被抽象成了编程语言本身的核心。在本章中,我们将回顾......
  • Python 比特币编程实用指南(全)
    原文:zh.annas-archive.org/md5/2feb12244d893eae70a77f3f952c5da5译者:飞龙协议:CCBY-NC-SA4.0前言在本书中,您将介绍比特币和区块链,以及如何参与比特币生态系统。您将了解比特币及其特性、区块链以及两者如何共同工作。您还将学习如何使用Pi比特币工具来用Python编程比......
  • Python 入门指南(三)
    原文:zh.annas-archive.org/md5/97bc15629f1b51a0671040c56db61b92译者:飞龙协议:CCBY-NC-SA4.0第六章:算法设计原则我们为什么要学习算法设计?当然有很多原因,我们学习某事的动机很大程度上取决于我们自己的情况。对于对算法设计感兴趣有重要的职业原因。算法是所有计算的基础......
  • Python 物联网入门指南(五)
    原文:zh.annas-archive.org/md5/4fe4273add75ed738e70f3d05e428b06译者:飞龙协议:CCBY-NC-SA4.0第十四章:文件I/O和Python工具在本章中,我们将详细讨论文件I/O,即读取、写入和追加文件。我们还将讨论Python工具,这些工具使得操作文件和与操作系统交互成为可能。每个主题都......