pymsql 或者 有推荐其他的数据库框架吗,我想防注入。。

2018-05-22 20:29:21 +08:00
 lazysoft

我是新人,刚学一段时间的 py 一度放弃,今天又看了看 flask

蹑手蹑脚开发出来了基本的 web 网页, 操作到了数据库, 目前使用的 pymysql 以及 DBUtils 作为连接池管理。

但是好像,。 字符串的 format 或者 %s 都不能过滤。。 求指导 求推荐

3589 次点击
所在节点    Python
23 条回复
qsnow6
2018-05-22 20:55:31 +08:00
orm 了解下
gamexg
2018-05-22 21:48:34 +08:00
关键字:参数化查询
soho176
2018-05-22 22:02:49 +08:00
刚开始学真的不用考虑这么多 先把程序写出来再考虑其他吧
whx20202
2018-05-22 22:14:39 +08:00
参数化查询或者 ORM
另外如果是手写的 SQL,参数化查询也不一定是保险的,
表名,limit order by offset 这些记得用白名单或者强制转整形
mamian
2018-05-22 22:32:20 +08:00
请贴代码,很多人用 pymsql 直接拼接字符串的
so1n
2018-05-22 22:46:51 +08:00
%s 不行?
mhycy
2018-05-22 22:48:24 +08:00
印象中。。python 的 mysql 查询没有真正的参数化查询
参数化效果依赖库的底层字符串拼接实现

望指正
yu099
2018-05-22 22:56:46 +08:00
@mhycy 有的,前几天刚写过
yu099
2018-05-22 22:58:53 +08:00
wobushizhangsan
2018-05-22 23:00:00 +08:00
预处理不就防注入了
summerwar
2018-05-22 23:05:30 +08:00
flask-sqlalchemy
eggshell
2018-05-22 23:10:57 +08:00
mhycy
2018-05-22 23:11:19 +08:00
@yu099
这个库的底层依旧是拼接,只是过了一层转义
和真正的参数化查询有区别
yu099
2018-05-22 23:36:00 +08:00
@mhycy 看了一下代码实现确实如此,这就很尴尬了。各个地方都这么介绍,我还以为是标准的预处理…
Nick2VIPUser
2018-05-23 00:22:36 +08:00
如果是不含 ORM 组件的 web 框架可以使用 sqlalchemy。
另外问一下各位,使用 pymysql 的的时候,我在执行 sql 前强制检测单引号并转义,是不是能防止注入?
alvin666
2018-05-23 00:23:11 +08:00
我是用 re 预处理,如果含有特殊字符就直接返回
yu099
2018-05-23 08:38:56 +08:00
@Nick2VIPUser 这个拼接的感觉还是有些风险,有些 SQL 注入对检测转义绕过方式就是使用编码,对检测的要求非常高
carakan
2018-05-23 08:42:43 +08:00
@yu099 编码?就是 utf-8 gbk 这样的?我昨天查了下资料..要检测编码也是很难,有些编码,有重合...
lazysoft
2018-05-23 10:04:21 +08:00
贴不了图额。。。

if request.method == 'POST':
form = request.form
username = form.get('username')
password = form.get('password')

pool = SingletonDBPool()
con = pool.connect()
cur = con.cursor()

sql = "select * from users where username = '%s' and passwords = '%s'" % (username,password)
print(sql)
cur.execute(sql)
result = cur.fetchone()
con.commit()
con.close()
print(result)
lazysoft
2018-05-23 10:04:35 +08:00
@mamian 已贴代码

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/456943

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX