Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中使用sqlite3的注入安全参数化查询_Python_Sqlite - Fatal编程技术网

python中使用sqlite3的注入安全参数化查询

python中使用sqlite3的注入安全参数化查询,python,sqlite,Python,Sqlite,我一直在阅读sqlite的文档,发现许多来源强烈建议在查询中避免python字符串替换,因为这会使它们容易受到注入攻击: 避免: conn.executeSELECT*自%s%表\u名称 conn.executeSELECT*来自{}.formattable_name 我见过几个简单的示例,其中使用slqlite参数替换了如下字符串格式: 值='my_table','1' conn.EXECUTE从中选择*?其中ROWID=?,值 这在简单情况下有效,但在我想要从列表中检索参数值时失败,如本例所

我一直在阅读sqlite的文档,发现许多来源强烈建议在查询中避免python字符串替换,因为这会使它们容易受到注入攻击:

避免:

conn.executeSELECT*自%s%表\u名称 conn.executeSELECT*来自{}.formattable_name 我见过几个简单的示例,其中使用slqlite参数替换了如下字符串格式:

值='my_table','1' conn.EXECUTE从中选择*?其中ROWID=?,值 这在简单情况下有效,但在我想要从列表中检索参数值时失败,如本例所示:

使用字符串格式的工作代码:

c、 executeBEGIN事务 对于范围内的i,金额: c、 执行 插入到事务{},{},{},{},{},{} 值'{}','{}','{}','{}','{}','{}','{}' .formatheader[0]、标头[1]、标头[2]、标头[3]、标头[4], 日期、参与方、方向、交易方、金额 db.commit 使用参数的非工作代码:

c、 executeBEGIN事务 对于范围内的i,金额: 值=头[0]、头[1]、头[2]、头[3]、头[4], 日期、参与方、方向、交易方、金额 c、 执行 插入到交易记录?、?、?、?、? 价值观 价值观
有没有办法使用?从列表中检索参数值时,是否在sql查询中填写参数

您可以使用绑定变量来参数化值。不能参数化列名、表名或其他SQL对象的名称


为这些名称使用不受信任的数据天生就是不安全的——而且,如果能够做到这一点,将无法预先分析可以使用哪些索引或如何有效地执行查询,这是预处理语句的一个与安全无关的好处。

您可以使用绑定变量来参数化值。不能参数化列名、表名或其他SQL对象的名称


为这些名称使用不受信任的数据天生就是不安全的——而且,如果能够做到这一点,将无法预先分析可以使用哪些索引,或者如何有效地执行查询,这是预处理语句的一个与安全无关的好处。

问到了Oracle的一个基本问题,但答案适用于所有sane SQL数据库。另外,…同时,对MySQL提出同样的问题并得到同样的答案。询问Oracle的基本问题,但所有sane SQL数据库的答案都是正确的。还有,还有,问了同样的问题,MySQL也得到了同样的答案。谢谢Charles。我已经编写SQL大约一年了,但我对用python与数据库交互还比较陌生。我是否正确理解,问题不在于我是从列表中的一个值填充参数,而在于我是在用一个参数来做一些我不允许做的事情?@Evan,完全正确。谢谢Charles。我已经编写SQL大约一年了,但我对用python与数据库交互还比较陌生。我是否正确理解,问题不在于我是从列表中的一个值填充参数,而在于我是在使用一个参数来处理一些我不允许使用的事情?@Evan,完全正确。