这段 Python 代码是否容易受到 SQL 注入攻击? (SQLite3)

2024-04-16

正如标题所示,我想知道这段代码是否容易受到 SQL 注入攻击?如果是这样,是否有更好、更安全的方法来实现同样的目标?

def add(table,*args):
    statement="INSERT INTO %s VALUES %s" % (table,args)
    cursor.execute(statement)

是的。使用类似这样的东西来防止它:

cursor.execute("INSERT INTO table VALUES ?", args)

请注意,您不能像这样输入表格。理想情况下,该表应该是硬编码的,在任何情况下都不应来自任何类型的用户输入。您可以使用与表中类似的字符串,但您最好 100% 确定用户无法以某种方式更改它......请参阅sqlite3中表名可以使用参数吗? https://stackoverflow.com/questions/5870284/can-i-use-parameters-for-the-table-name-in-sqlite3更多细节。

本质上,您希望将参数放在游标命令中,因为这将确保数据数据库的安全。使用你的第一个命令,制作一个特殊的命令会相对容易table or args在你的 SQL 代码中添加了一些不安全的东西。请参阅蟒蛇页面 http://docs.python.org/2/library/sqlite3.html,以及所引用的http://xkcd.com/327/ http://xkcd.com/327/。具体来说,Python 页面引用了:

通常您的 SQL 操作需要使用 Python 中的值 变量。你不应该使用 Python 的字符串来组装你的查询 操作,因为这样做不安全;它使你的程序 容易受到 SQL 注入攻击(请参阅http://xkcd.com/327/ http://xkcd.com/327/为了 可能出错的幽默例子)。

相反,请使用 DB-API 的参数替换。放 ?作为一个 在您想要使用值的任何位置使用占位符,然后提供一个元组 值作为游标的execute()方法的第二个参数。 (其他数据库模块可能使用不同的占位符,例如 %s 或 :1。)

基本上,有人可以设置一个执行另一个命令的参数,如下所示:

args="name; DELETE table"

使用cursor.execute将填充给定的值,以便参数可以如列出的那样,并且当您对其进行查询时,这正是您将得到的结果。XKCD http://xkcd.com/327/也幽默地解释了这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这段 Python 代码是否容易受到 SQL 注入攻击? (SQLite3) 的相关文章

  • 使用 C# 计算 HMACSHA256 以匹配支付提供商示例

    对于支付提供商 我需要使用 HMAC SHA256 计算基于哈希的消息身份验证代码 这给我带来了很大的麻烦 支付提供商以伪代码形式给出了两个正确计算验证码的示例 所有密钥均为十六进制 Method 1 key 57617b5d2349434
  • 对所有列实施搜索过滤器

    我在 PostgreSQL 中找到了这个搜索示例http www postgresql org docs current interactive textsearch tables html TEXTSEARCH TABLES SEARCH
  • Python 在打开套接字时可以选择哪个网络适配器吗?

    运行 python 应用程序的目标计算机将具有三个可用的网络接口 一般来说 所有三个网络都会有很大不同 但是三个网络中的两个可能位于相似的网络上 在下面的示例中 我无法控制 ETH 2 上的目标地址 因为它是预先配置的系统 因此我被迫以编程
  • Python套接字模块:Recv()数据响应被切断

    解释 我目前正在尝试使用 python 脚本控制智能电源板 为了实现这一点 我使用了带有套接字模块的 TCP 连接 大约 75 的情况下 我会得到我正在寻找的响应 数据 并且一切都运行良好 然而 大约 25 的情况下 响应会以完全相同的长度
  • 在 SQL 存储过程中选择并合并表中的行

    有一个具有架构的临时表 ID 序列号 姓名 ID 不唯一SeqNo 整数 可以是 1 2 或 3 以ID SeqNo作为主键排序名称 任何文本 表中的示例数据如下 1 1 RecordA 2 1 RecordB 3 1 RecordC 1
  • 继续在文件的同一行写入

    我已经使用以下命令打开了要写入的文件 data open input a 使用循环 我想在同一行中向文件写入一些单词 在每次循环迭代之后我想添加一个换行符 while loop for loop do something if some c
  • 如何列出引用 SQL Server 中给定表的所有外键?

    我需要删除 SQL Server 数据库中高度引用的表 如何获取删除表时需要删除的所有外键约束的列表 SQL 答案比在 Management Studio 的 GUI 中单击有关更好 不知道为什么没有人建议但我使用sp fkeys查询给定表
  • Python:将字典转换为字节

    我正在尝试将字典转换为字节 但在将其转换为正确的格式时遇到问题 首先 我尝试使用自定义架构映射字典 模式定义如下 class User def init self name None code None self name name sel
  • MySQL 查询在基于特定标签组合获取行时返回不需要的行

    我在 Windows 8 PC 上运行 PHP MySQL 我有一张桌子mytable像下面这样 product tag lot 1111 101 2 1111 102 5 2222 103 6 3333 104 2 4444 101 2
  • python 正则表达式:匹配空格字符或字符串结尾

    我想匹配文本中的空格字符或字符串结尾 import re uname abc assert re findall s s uname uname assert re findall s s uname uname aa assert not
  • scikit-learn:SVC 和 SGD 有什么区别?

    SVM http scikit learn org stable modules svm html classification http scikit learn org stable modules svm html classific
  • SQL 按行计数模进行分组

    我有以下示例数据 Id Name Quantity 1 Red 1 2 Red 3 3 Blue 1 4 Red 1 5 Yellow 3 因此 对于此示例 总共有 5 个红色 1 个蓝色和 3 个黄色 我正在寻找一种按颜色对它们进行分组的
  • 分段错误(核心转储),执行线程

    我试图在 python 中运行一个程序 该程序打开一个程序并从其标准输出中读取 当我运行程序代码时 出现分段错误错误 但是当我将代码放入函数 Myfunc 中的线程外时 它可以正常工作 我不明白发生了什么 这是我的代码 class Work
  • 使用 CustomCallback() 类在训练时实现冻结层

    我正在尝试在 TensorFlow 中训练自定义 CNN 模型 我想以某种方式在训练仍在运行时冻结特定时期模型的某些层 我已经实现了冻结层 但我必须在某些时期训练模型 然后在我想要冻结的特定层中将可训练属性更改为 False 然后编译模型
  • 是否可以将密码以纯文本形式存储在 php 变量或 php 常量中?

    根据问题 在 php 页面上存储密码是否安全 例如 password pa w0rd 如果用户看不到它 那就安全了 对吗 编辑 确实有人建议使用hash 但是数据库服务器连接密码会有问题不是吗 简短的回答是否定的 而且要看情况 以纯文本形式
  • 如何从Java中的sqlite中的多个表中进行选择?

    我正在尝试学习如何在 java 程序中使用 sqlite 数据库 不是安卓 我去了this https bitbucket org xerial sqlite jdbc overview链接 下载 jdbc 库并复制示例 该示例运行正常 没
  • 添加类方法后如何更新类的实例?

    我发现自己陷入了困境 我开发了一个类 然后创建了该类的一个实例 这些类通常会执行数据和统计操作 这些操作需要很长时间 有时需要 20 分钟 我将继续开发我的类 并向其中添加其他方法 现在 如何使用新方法更新以前的类实例而不重新初始化该类的旧
  • 如何在 Flask 之外使用 jinja2 及其 i18n 扩展(使用 babel)

    如何在 Flask 应用程序之外将 jinja2 与 babel 一起使用 假设我有使用 pybabel 命令填充的语言环境目录 我想加载翻译文件并翻译我的模板文件 我找到了解决方案 以下是如何在不集成 Flask 的情况下使用 jinja
  • 如何使用 Python 将表格从 CSV 写入 PDF [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个CSV文件包含下表 users passwords company Admin test psw test cmp test
  • 从Python中的一行中删除标签

    我有一个具有以下架构的文本 word1 word2 br word3 word4 br 我想删除最后一部分 并将我的结果存储在另一个文件中 我已尝试以下操作 仍然没有将结果保存在其他文件中 def main fileR open test

随机推荐

  • 从 perl 中的外部 *nix 命令获取 STDOUT、STDERR 和响应代码

    我想从 Perl 脚本中执行外部命令 将 stdout 和 stderr 的输出放入 variable我的选择 并将命令的退出代码放入 多变的 我经历过解决方案perlfaq8 http perldoc perl org perlfaq8
  • 打印 JTextField 在控制台上显示空白

    我是Java新手 刚刚尝试了Java的swing 我尝试制作一个登录表单 将JTextField的内容打印到控制台 但是当我尝试它时 控制台没有显示任何内容 这是我的代码 import java awt EventQueue import
  • 如何在角度中对取消订阅功能进行单元测试

    我想找到一种方法来测试订阅和主题上的取消订阅函数调用 我想出了一些可能的解决方案 但每一种都有优点和缺点 请记住 我不想出于测试目的而更改变量的访问修饰符 通过反射访问组件的私有变量 在这种情况下 我有一个存储订阅的私有类变量 组件 ts
  • 将 DIV 包裹在 Anchor 标签或其他标签内

    假设我有一个可点击的复合体div链接到另一个页面的元素结构如下 这就是当前通过点击实现的事情 单击 css 活动状态 更改内部背景颜色 a 标记并重定向到其他页面 我想知道这是否符合 HTML5 验证 或者与用div并使用 JavaScri
  • 如何防止 UINavigationBar 在 iOS 7 中覆盖视图顶部?

    更新到 Xcode 5 后 我的所有应用程序视图中的导航栏都下移了 以下是一些屏幕截图 第一个显示了视图中拉下时的所有内容 第二个显示了所有未受影响的内容 搜索栏应从导航栏开始 有人知道我该如何解决这个问题吗 编辑 我之前尝试过这个建议 i
  • java 应用程序冻结 mac os 10.9 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要帮助 我有 mac os 10 9 并安装了 java JDK 1 7 java 版本 java版本 1 7 0 45 Java T
  • (Django) 事件日历的最佳解决方案

    我需要向我的应用程序添加事件日历功能 我想知道您认为最好的方法是什么 是否有任何有趣的项目提供所需的功能 一个片段 http djangosnippets org snippets 129 http djangosnippets org s
  • 在 Perl 中通过索引从数组中排除元素的最佳方法是什么?

    我使用以下代码来排除中的元素 x 在索引处 index 但我不确定这是实现此功能的最有效方法 大家有什么更好的办法吗 sub arrayexclude my x shift my index shift my keep index 0 sc
  • searchkick 不返回带有空格的结果

    所以我有这个 searchckick 方法 search options misspellings edit distance 2 fields eventname date city order score desc date asc e
  • 如何在 Python 中将输入打印为整数、浮点数或字符串

    我的代码的目的是让输出给出输入的数字和类型 例如 如果输入是 10 输出应该是 10 is an integer 如果输入是 10 0 输出应该是 10 0 is a float 如果输入是 Ten 输出应该是 Ten is a strin
  • 具有可变数量参数的 Python itertools.product

    我正在尝试编写一个模块来使用 itertools product 组合可变数量的列表 我能得到的最接近的是 import itertools lists item1 item2 A b C etc searchterms list iter
  • 使用 new 隐藏方法的用例

    这或多或少是一个完全相同的副本这个帖子 https stackoverflow com questions 3117838 why do we need the new keyword and why is the default beha
  • ReactJS:类型错误:this.state.data.map 不是函数

    有人可以帮我解决这个问题吗 我收到此问题标题中描述的错误 我想将 JSON 数据放入react grid layout 组件中 该库可以在 https github com STRML react grid layout https git
  • MS Azure - 错误请求 400

    每次运行这行代码时 我都会收到错误的请求错误 List
  • Glide v4 中的占位符/错误/后备 [重复]

    这个问题在这里已经有答案了 我现在使用的是最新版本的 Glide滑行 4 0 0 RC1并且无法找到占位符 错误 后备等方法 也许他们已经提供了替代方案 但我没有得到它 有人知道这个版本中有替代方案吗 try this RequestOpt
  • “PHP 致命错误:未找到类‘HttpRequest’”

    我一直在尝试以多种方式解决这个问题 阅读了很多帖子 但仍然没有运气 我在 Mac OSX 10 7 Lion 上工作 并且正在使用 MAMP 为 WordPress 站点 php 文件 编写一个插件 并且在某一时刻我必须发出 HTTP 请求
  • 是否有任何正式的方法或已知的方法来规范化 xml 文件以生成差异?

    似乎有很多关于 WRT 工具在 xml 之间生成差异的问题 但还没有这个问题 所以任何知道这个问题的人都会向我展示一个链接或粘贴任何人已经解决了这个问题的示例 规范化 xml 文件意味着 重新排序属性的外观 重新排序标签的外观 可通过命令行
  • 使用内部联接编写用 SQL 编写的继承查询?

    我承认我的 SQL 知识 使用 mySQL 几乎没有超出数据库管理所需的标准查询 并且我的大部分数据操作都是通过 php 完成的 我一直渴望改变这一点 并且到目前为止已经取得了成功 如果有人能建议我如何在包含 父 子 字段 内部字段的标准表
  • Xamarin Studio 中的目标平台被禁用?

    When creating a new project the target platform Android is already greyed out so can t proceed 我已经链接了SDK和NDK 如果您未安装 Xama
  • 这段 Python 代码是否容易受到 SQL 注入攻击? (SQLite3)

    正如标题所示 我想知道这段代码是否容易受到 SQL 注入攻击 如果是这样 是否有更好 更安全的方法来实现同样的目标 def add table args statement INSERT INTO s VALUES s table args