我在python中有一个程序,我希望将数据插入到表中(使用insert into语句)。我从网络(网络刮取)接收数据,数据包含单引号和双引号。如您所知,MySQL允许向表中插入单引号和双引号,因此错误不是来自数据库。当我在python中使用该数据时出现了问题,并出现了一个错误。如果我在python中使用字符串(插入语句值)中的单引号或双引号,在这两种情况下都会出现错误,因为数据(包含单引号或双引号).I使用mysql和Connector/ python,在我的脚本中导入MySQL。我希望你能搞定,很抱歉英语不太好。
发布于 2019-02-26 17:07:55
对此行为最有可能的解释是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://stackoverflow.com/questions/54855823
复制相似问题