python中如何防止sql注入

python访问数据库的底层库很多,以pymysql为例, 它在执行sql前,会对sql中的特殊字符进行转义,如

  • 字符转义
def escape_string(value, mapping=None):
    """escape_string escapes *value* but not surround it with quotes.


    Value should be bytes or unicode.
    """
    if isinstance(value, unicode):
        return _escape_unicode(value)
    assert isinstance(value, (bytes, bytearray))
    value = value.replace('\\', '\\\\')
    value = value.replace('\0', '\\0')
    value = value.replace('\n', '\\n')
    value = value.replace('\r', '\\r')
    value = value.replace('\032', '\\Z')
    value = value.replace("'", "\\'")
    value = value.replace('"', '\\"')
    return value
  •  执行sql的正确方法,不要在sql中拼接参数,字符转义只会针对参数args
# query作为sql模板,args为将要传入的参数
execute(query, args=None)
  • django/sqlalchemy
orm框架都是使用pymysql/MySQL-python等库,并且都使用execute(query,args)调用,将sql与参数分开传入。

  • sql注入检测工具

sqlmap


《寿康宝鉴》有声书
寿康宝鉴百话有声书(mp3)
百度网盘  https://pan.baidu.com/s/1rs5k7RTB9DxgdCuG-mSzog  密码 9lf1



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值