防止MySQLPython在数据库名称param前后插入引号

2024-04-20 10:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,它要求我从django应用程序以编程方式创建MySQL用户。我可以很好地创建用户:

from django.db import connection, transaction
cursor = connection.cursor()
cursor.execute("CREATE USER %s@'%'", 'username')
cursor.execute("SET PASSWORD FOR %s@'%' = PASSWORD(%s)", ('username', 'pass'))

那很好用。问题是当我试图授予权限时。数据库名称也可以通过编程方式确定:

^{pr2}$

这会导致mysql错误,因为当它执行字符串替换时,它会在数据库名称周围加上单引号,这在语法上是不正确的:

DatabaseError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''dbname'.* to 'username'@'%'' at line 1")

如何防止在数据库名的%s周围添加单引号?我知道我可以简单地在Python中执行字符串替换并修复此问题,但这可能会导致SQL注入漏洞。在


Tags: todjango字符串用户名称数据库execute编程
1条回答
网友
1楼 · 发布于 2024-04-20 10:22:47

有时占位符不起作用(正如您所发现的),所以您必须使用字符串连接。请小心-验证字符串,确保它只由您期望的字符组成(不要只查找您不期望的字符),您应该没事。另外,让另一个开发人员检查您的代码,并对其进行注释,以确保没有人认为您应该使用占位符。在

相关问题 更多 >