Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
MySQL/Python注入预防问题_Python_Mysql_Sql Injection - Fatal编程技术网

MySQL/Python注入预防问题

MySQL/Python注入预防问题,python,mysql,sql-injection,Python,Mysql,Sql Injection,在我正在制作的应用程序中,用户可以键入他们想要连接到的数据库的名称,代码将用户连接到该数据库 我试图阻止任何MySQL注入到这个非常简单的查询中,并尝试使用以下方法: cursor.execute(“使用%s;”,(dbName),) 从以下链接获取此类型的语句: 但是,它没有连接到数据库。相反,if会给我以下错误: 1064(42000):您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“my_db_name”附近使用的正确语法 当我进行快速而肮脏的连接时,它连接得很

在我正在制作的应用程序中,用户可以键入他们想要连接到的数据库的名称,代码将用户连接到该数据库

我试图阻止任何MySQL注入到这个非常简单的查询中,并尝试使用以下方法:
cursor.execute(“使用%s;”,(dbName),)

从以下链接获取此类型的语句:

但是,它没有连接到数据库。相反,if会给我以下错误:

1064(42000):您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“my_db_name”附近使用的正确语法

当我进行快速而肮脏的连接时,它连接得很好:
cursor.execute(“使用”+dbName)

当SQL不是查询时,是否不可能使用这种类型的SQL注入预防?这仅在将参数插入SELECT语句时有效吗?我应该如何进行


如果这是一个愚蠢的问题,我真的很抱歉。我对Python非常陌生,对SQL一般来说也相当陌生。

您希望您的服务器控制查询结构,这意味着您希望它可以预测从何处和如何选择,并且您希望用户只需要很少的选择就可以插入一些特定值,比如
where foo=%s
子句中的值。
USE
语句对查询结构有很大影响,即您不再能够控制“from where”。这就是不能使用参数化查询的原因之一。与列或表名相同。您需要有一个允许值的白名单。非常感谢您的快速响应。这是有道理的。我的意图实际上是创建一个“数据库配置工具”,用户将能够为特定用途创建自己的数据库和表。我看到安全问题将比我想象的更加复杂。