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