推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
lazysoft
V2EX  ›  Python

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

  •  
  •   lazysoft · May 22, 2018 · 4789 views
    This topic created in 3088 days ago, the information mentioned may be changed or developed.

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

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

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

    23 replies  •  2018-05-24 09:19:04 +08:00
    qsnow6
    qsnow6
    May 22, 2018 via iPhone
    1
    orm 了解下
    gamexg
    gamexg
    May 22, 2018
    2
    关键字:参数化查询
    soho176
    soho176
    May 22, 2018
    3
    刚开始学真的不用考虑这么多 先把程序写出来再考虑其他吧
    whx20202
    whx20202
    May 22, 2018
    4
    参数化查询或者 ORM
    另外如果是手写的 SQL,参数化查询也不一定是保险的,
    表名,limit order by offset 这些记得用白名单或者强制转整形
    mamian
    mamian
    May 22, 2018
    5
    请贴代码,很多人用 pymsql 直接拼接字符串的
    so1n
    so1n
    May 22, 2018 via Android
    6
    %s 不行?
    mhycy
    mhycy
    May 22, 2018
    7
    印象中。。python 的 mysql 查询没有真正的参数化查询
    参数化效果依赖库的底层字符串拼接实现

    望指正
    yu099
    yu099
    May 22, 2018 via Android
    8
    @mhycy 有的,前几天刚写过
    yu099
    yu099
    May 22, 2018 via Android
    9
    wobushizhangsan
    wobushizhangsan
    May 22, 2018 via Android❤️1
    10
    预处理不就防注入了
    summerwar
    summerwar
    May 22, 2018
    11
    flask-sqlalchemy
    mhycy
    mhycy
    May 22, 2018
    13
    @yu099
    这个库的底层依旧是拼接,只是过了一层转义
    和真正的参数化查询有区别
    yu099
    yu099
    May 22, 2018 via Android
    14
    @mhycy 看了一下代码实现确实如此,这就很尴尬了。各个地方都这么介绍,我还以为是标准的预处理…
    Nick2VIPUser
    Nick2VIPUser
    May 23, 2018
    15
    如果是不含 ORM 组件的 web 框架可以使用 sqlalchemy。
    另外问一下各位,使用 pymysql 的的时候,我在执行 sql 前强制检测单引号并转义,是不是能防止注入?
    alvin666
    alvin666
    May 23, 2018 via Android
    16
    我是用 re 预处理,如果含有特殊字符就直接返回
    yu099
    yu099
    May 23, 2018 via Android
    17
    @Nick2VIPUser 这个拼接的感觉还是有些风险,有些 SQL 注入对检测转义绕过方式就是使用编码,对检测的要求非常高
    carakan
    carakan
    May 23, 2018
    18
    @yu099 编码?就是 utf-8 gbk 这样的?我昨天查了下资料..要检测编码也是很难,有些编码,有重合...
    lazysoft
    lazysoft
    OP
    May 23, 2018
    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)
    lazysoft
    lazysoft
    OP
    May 23, 2018
    20
    @mamian 已贴代码
    Nick2VIPUser
    Nick2VIPUser
    May 23, 2018
    21
    @yu099 有看您发的博客,学习了
    hcymk2
    hcymk2
    May 23, 2018❤️1
    22
    mamian
    mamian
    May 24, 2018
    23
    @lazysoft
    sql = "select * from users where username = '%s' and passwords = '%s'"

    cur.execute(sql, (username,password))
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1744 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 119ms · UTC 17:19 · PVG 01:19 · LAX 09:19 · JFK 12:19
    ♥ Do have faith in what you're doing.