python sql注入如何防止_PyMySQL如何防止用户遭受sql注入攻击?

Python驱动程序不使用实际的查询参数。在python中,参数(示例中的变量attack)在将SQL发送到数据库服务器之前被插入到SQL字符串中。在

这与使用查询参数不同。在真正的参数化查询中,SQL字符串被发送到数据库服务器,参数占位符保持不变。在

但是Python驱动程序确实在插值时正确地避开了参数,这可以防止SQL注入。在

我可以在打开查询日志时证明:mysql> SET GLOBAL general_log=ON;

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

^{pr2}$

您可以看到,该查询已将值内插到其中,并且嵌入的引号字符前面有一个反斜杠,这将阻止它成为SQL注入向量。在

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

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

SQL注入漏洞示例:attack="jason' and '1'='1"

sqls="select id from tables where name='%s'" % attack

cursor.execute(sqls)

日志显示这导致了SQL注入:180802 8:59:30 16 Connect root@localhost on test

16 Query SET @@session.autocommit = OFF

16 Query select id from tables where name='jason' and '1'='1'

16 Quit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值