MySQL/Python注入预防问题
在我正在制作的应用程序中,用户可以键入他们想要连接到的数据库的名称,代码将用户连接到该数据库 我试图阻止任何MySQL注入到这个非常简单的查询中,并尝试使用以下方法:MySQL/Python注入预防问题,python,mysql,sql-injection,Python,Mysql,Sql Injection,在我正在制作的应用程序中,用户可以键入他们想要连接到的数据库的名称,代码将用户连接到该数据库 我试图阻止任何MySQL注入到这个非常简单的查询中,并尝试使用以下方法: cursor.execute(“使用%s;”,(dbName),) 从以下链接获取此类型的语句: 但是,它没有连接到数据库。相反,if会给我以下错误: 1064(42000):您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“my_db_name”附近使用的正确语法 当我进行快速而肮脏的连接时,它连接得很
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”。这就是不能使用参数化查询的原因之一。与列或表名相同。您需要有一个允许值的白名单。非常感谢您的快速响应。这是有道理的。我的意图实际上是创建一个“数据库配置工具”,用户将能够为特定用途创建自己的数据库和表。我看到安全问题将比我想象的更加复杂。