作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
很抱歉在这里提问,但我找不到很多关于 pymysql 的安全指南关于我们如何防止 sql 注入(inject)的引用,
当我做 PHP 开发时,我知道使用 mysql 准备语句(或称为参数化查询或 stmt),但我在 pymysql 中找不到关于此的引用
简单的代码使用pymysql之类的
sqls="select id from tables where name=%s"
attack="jason' and 1=1"
cursor.execute(sqls,attack)
最佳答案
Python 驱动程序不使用真正的查询参数。在python中,在将SQL发送到数据库服务器之前,参数(在你的例子中是变量attack
)被插入到SQL字符串中。
这与使用查询参数不同。在真正的参数化查询中,SQL 字符串被发送到数据库服务器,参数占位符完好无损。
但是 Python 驱动程序在插入时确实会正确地转义参数,从而防止 SQL 注入(inject)。
我打开查询日志就可以证明:
mysql> SET GLOBAL general_log=ON;
$ tail -f /usr/local/var/mysql/bkarwin.log
...
180802 8:50:47 14 Connect root@localhost on test
14 Query SET @@session.autocommit = OFF
14 Query select id from tables where name='jason\' and 1=1'
14 Quit
attack="jason' and '1'='1"
sqls="select id from tables where name='%s'" % attack
cursor.execute(sqls)
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
关于python - PyMySQL 如何防止用户遭受 sql 注入(inject)攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51647301/
对于我们目前正在构建的发票系统,我很难理解基于状态的功能。该系统将支持发票的计算、人工审批、打印和存档。 起初我认为我们应该使用 State Pattern对此进行建模。发票将是上下文,它将打印、归档
我是一名优秀的程序员,十分优秀!