我有一个python程序,我想将数据插入表中(使用insert into语句)。我从网络(网络抓取)接收数据,并且数据包含单引号和双引号。众所周知,MySQL允许在表中插入单引号和双引号,因此错误并非来自数据库。当我在python中使用该数据时出现问题,并出现错误。 不管我在python的字符串中使用单引号还是双引号(插入语句值),由于数据(包含单引号或双引号)两种方式都会出现错误。我在脚本中使用MySQL和Connector / python我导入mysql。希望您能收到,对不起英语不好。
答案 0 :(得分:0)
有关此行为的最可能解释是SQL注入漏洞。 (这只是一个猜测,因为我们正在猜测未见的代码;仅是对行为的描述。)
简短的答案是将准备好的语句与绑定占位符
一起使用https://pynative.com/python-mysql-execute-parameterized-query-using-prepared-statement/
如果由于某些原因而无法实现,那么至少要对SQL文本中包含的任何潜在不安全值进行适当的转义,以使其安全地包含在其中
(小鲍比表https://xkcd.com/327/中的单引号不会转义。)
例如,此SQL将引发错误,因为第二个单引号引起了字符串文字,并且在字符串文字“ s wrong
”之后的内容在SQL方面是胡言乱语的:
INSERT INTO mytab (mycol) VALUES ( 'It's wrong' )
^
但这会起作用:
INSERT INTO mytab (mycol) VALUES ( 'It''ll work' )
^^
因为在字符串文字中的单引号被转义了,所以在它前面加上了另一个单引号。
OWASP项目很好地概述了SQL注入。
https://www.owasp.org/index.php/SQL_Injection
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet