V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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 · 4313 views
    This topic created in 2907 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
        1
    qsnow6  
       May 22, 2018 via iPhone
    orm 了解下
    gamexg
        2
    gamexg  
       May 22, 2018
    关键字:参数化查询
    soho176
        3
    soho176  
       May 22, 2018
    刚开始学真的不用考虑这么多 先把程序写出来再考虑其他吧
    whx20202
        4
    whx20202  
       May 22, 2018
    参数化查询或者 ORM
    另外如果是手写的 SQL,参数化查询也不一定是保险的,
    表名,limit order by offset 这些记得用白名单或者强制转整形
    mamian
        5
    mamian  
       May 22, 2018
    请贴代码,很多人用 pymsql 直接拼接字符串的
    so1n
        6
    so1n  
       May 22, 2018 via Android
    %s 不行?
    mhycy
        7
    mhycy  
       May 22, 2018
    印象中。。python 的 mysql 查询没有真正的参数化查询
    参数化效果依赖库的底层字符串拼接实现

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

    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
        20
    lazysoft  
    OP
       May 23, 2018
    @mamian 已贴代码
    Nick2VIPUser
        21
    Nick2VIPUser  
       May 23, 2018
    @yu099 有看您发的博客,学习了
    hcymk2
        22
    hcymk2  
       May 23, 2018   ❤️ 1
    mamian
        23
    mamian  
       May 24, 2018
    @lazysoft
    sql = "select * from users where username = '%s' and passwords = '%s'"

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