PyMySQL如何防止用户受到sql注入攻击?

PyMySQL如何防止用户受到sql注入攻击?,第1张

PyMySQL如何防止用户受到sql注入攻击?

Python驱动程序不使用真实的查询参数。在python中,将参数(

attack
示例中的变量)插入SQL字符串中,然后再将SQL发送到数据库服务器。

这与使用查询参数不同。在真实的参数化查询中,SQL字符串将在不带参数占位符的情况下发送到数据库服务器。

但是,Python驱动程序确实会在插值时正确地转义了参数,从而防止了SQL注入。

我可以在打开查询日志时证明这一点:

mysql> SET GLOBAL general_log=ON;

然后在运行Python脚本时跟踪日志:

$ tail -f /usr/local/var/mysql/bkarwin.log...180802  8:50:47    14 Connect   root@localhost on test14 Query SET @@session.autocommit = OFF14 Query select id from tables where name='jason' and 1=1'14 Quit

您可以看到查询中已经插入了值,并且嵌入的引号字符前面带有反斜杠,从而防止其成为SQL注入向量。

我实际上正在测试MySQL的Connector / Python,但是pymysql做同样的事情。

我不同意Python连接器的这种设计决策,以避免使用真实的查询参数(即,实际参数的工作方式是使用参数占位符将SQL查询发送到数据库,然后分别发送这些参数的值)。风险是程序员会认为将参数插入查询字符串中的
任何 字符串插值的效果都与驱动程序执行时的效果相同。

SQL注入漏洞示例:

attack="jason' and '1'='1"sqls="select id from tables where name='%s'" % attackcursor.execute(sqls)

日志显示这导致了SQL注入:

180802  8:59:30    16 Connect   root@localhost on test16 Query SET @@session.autocommit = OFF16 Query select id from tables where name='jason' and '1'='1'16 Quit


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5655086.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存