热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python/SQLite3在WHEREClause中转义

我应该如何在Python中为SQLite3进行真正的转义?如果我谷歌(或搜索stackoverflow)有很多问题,每次响应是这样的:dbcursor.execute(SELEC

我应该如何在Python中为SQLite3进行真正的转义?

如果我谷歌(或搜索stackoverflow)有很多问题,每次响应是这样的:

dbcursor.execute("SELECT * FROM `foo` WHERE `bar` like ?", ["foobar"])

这有助于防止SQL注入,并且如果我只是与“=”进行竞争就足够了,但它当然不会对通配符进行条带化处理.

所以,如果我这样做

cursor.execute(u"UPDATE `COOKIEs` set `count`=? WHERE `nickname` ilike ?", (COOKIEs, name))

某些用户可以为昵称提供“%”,并用一行替换所有COOKIE条目.
我可以自己过滤它(呃…我可能会忘记其中一个鲜为人知的通配符),我可以在昵称和昵称上使用小写,并用“=”替换“ilike”,但我真正想做的是类似的东西:

foo = sqlescape(nick)+"%"
cursor.execute(u"UPDATE `COOKIEs` set `count`=? WHERE `nickname` ilike ?", (COOKIEs, foo))

解决方法:

您通过使用参数化查询避免了直接代码注入.现在,您似乎正在尝试与用户提供的数据进行模式匹配,但您希望将用户提供的数据部分视为文字数据(因此没有通配符).你有几个选择:

>只需过滤输入. SQLite的LIKE只有understands%和_作为通配符,因此很难弄错.只需确保始终过滤输入. (我的首选方法:在构造查询之前过滤,而不是在读取用户输入时过滤).
>一般而言,“白名单”方法被认为比删除特定危险字符更安全,更容易.也就是说,不要删除字符串中的%和_(以及任何“鲜为人知的通配符”,如你所说),扫描你的字符串并只保留你想要的字符.例如,如果你的“昵称”可以包含ASCII字母,数字,“ – ”和“.”,它可以像这样清理:

name = re.sub(r"[^A-Za-z\d.-]", "", name)

此解决方案特定于您要匹配的特定字段,并且适用于关键字段和其他标识符.如果我必须使用RLIKE进行搜索,我肯定会这样做,它接受完整的正则表达式,因此需要注意更多的字符.
>如果您不希望用户能够提供通配符,为什么还要在查询中使用LIKE?如果您的查询的输入来自代码中的许多位置(或者您甚至可能正在编写库),那么如果您完全避免使用LIKE,则会使查询更安全:

>这是case insensitive matching:

SELECT * FROM ... WHERE name = 'someone' COLLATE NOCASE

>在您的示例中,您使用前缀匹配(“sqlescape(nick)”%“”).以下是使用精确搜索的方法:

size = len(nick)
cursor.execute(u"UPDATE `COOKIEs` set `count`=? WHERE substr(`nickname`, 1, ?) = ?",
(COOKIEs, size, nick))


推荐阅读
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 开发笔记:[14]SQL 别名
    开发笔记:[14]SQL 别名 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
  • 微信小程序开发指南:创建动态电影选座界面
    本文详细介绍如何在微信小程序中实现一个动态且可视化的电影选座组件,提高用户体验。通过合理的布局和交互设计,使用户能够轻松选择心仪的座位。 ... [详细]
  • pypy 真的能让 Python 比 C 还快么?
    作者:肖恩顿来源:游戏不存在最近“pypy为什么能让python比c还快”刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。正式开始之前,多唠叨两句 ... [详细]
  • 在移动端开发中,多点触控手势是提升用户体验的重要手段。然而,目前只有iOS浏览器原生支持手势事件,其他设备需要通过touchstart、touchmove和touchend等基础事件进行自定义实现。本文将详细介绍如何在Vue项目中实现多点触控手势。 ... [详细]
  • 一个转子曲线面积问题及其反问题的解答
    曾经解答过这样一个问题,从该ID的最后一次登录时间、该ID显示的专业信息,误以为是新闻里某个想不开的同学,不安了一阵子。经确认是我多虑了,不过把问题答案还是写出来。之后就收到一堆要求帮忙算 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
author-avatar
_戒咗微博地_100
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有