热门标签 | 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))


推荐阅读
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • Oracle 用户锁定问题及解决方法
    本文介绍了如何在 Oracle 数据库中检查和处理用户锁定问题,包括查询被锁定的用户、解锁用户以及调整登录失败次数限制的方法。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 如何有效防御网站中的SQL注入攻击
    本期文章将深入探讨网站如何有效防御SQL注入攻击。我们将从技术层面详细解析防范措施,并结合实际案例进行阐述,旨在帮助读者全面了解并掌握有效的防护策略。希望本文能为您的网络安全提供有益参考。 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • SQL注入防御:深入解析绕过addslashes技术的方法与策略 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
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社区 版权所有