我是新人,刚学一段时间的 py 一度放弃,今天又看了看 flask
蹑手蹑脚开发出来了基本的 web 网页, 操作到了数据库, 目前使用的 pymysql 以及 DBUtils 作为连接池管理。
但是好像,。 字符串的 format 或者 %s 都不能过滤。。 求指导 求推荐
1
qsnow6 2018-05-22 20:55:31 +08:00 via iPhone
orm 了解下
|
2
gamexg 2018-05-22 21:48:34 +08:00
关键字:参数化查询
|
3
soho176 2018-05-22 22:02:49 +08:00
刚开始学真的不用考虑这么多 先把程序写出来再考虑其他吧
|
4
whx20202 2018-05-22 22:14:39 +08:00
参数化查询或者 ORM
另外如果是手写的 SQL,参数化查询也不一定是保险的, 表名,limit order by offset 这些记得用白名单或者强制转整形 |
5
mamian 2018-05-22 22:32:20 +08:00
请贴代码,很多人用 pymsql 直接拼接字符串的
|
6
so1n 2018-05-22 22:46:51 +08:00 via Android
%s 不行?
|
7
mhycy 2018-05-22 22:48:24 +08:00
印象中。。python 的 mysql 查询没有真正的参数化查询
参数化效果依赖库的底层字符串拼接实现 望指正 |
9
yu099 2018-05-22 22:58:53 +08:00 via Android
|
10
wobushizhangsan 2018-05-22 23:00:00 +08:00 via Android 1
预处理不就防注入了
|
11
summerwar 2018-05-22 23:05:30 +08:00
flask-sqlalchemy
|
12
eggshell 2018-05-22 23:10:57 +08:00
|
15
Nick2VIPUser 2018-05-23 00:22:36 +08:00
如果是不含 ORM 组件的 web 框架可以使用 sqlalchemy。
另外问一下各位,使用 pymysql 的的时候,我在执行 sql 前强制检测单引号并转义,是不是能防止注入? |
16
alvin666 2018-05-23 00:23:11 +08:00 via Android
我是用 re 预处理,如果含有特殊字符就直接返回
|
17
yu099 2018-05-23 08:38:56 +08:00 via Android
@Nick2VIPUser 这个拼接的感觉还是有些风险,有些 SQL 注入对检测转义绕过方式就是使用编码,对检测的要求非常高
|
19
lazysoft OP 贴不了图额。。。
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) |
21
Nick2VIPUser 2018-05-23 10:38:16 +08:00
@yu099 有看您发的博客,学习了
|
22
hcymk2 2018-05-23 10:40:09 +08:00 1
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursorprepared.html
官方客户端 现在支持服务端的 prepared |
23
mamian 2018-05-24 09:19:04 +08:00
@lazysoft
sql = "select * from users where username = '%s' and passwords = '%s'" cur.execute(sql, (username,password)) |