python - 如何正确参数化查询和转义输入以防止 SQL 注入?
问题描述
我在 Python 3.4.3 中使用 mysqlclient(python3 的 MySQLdb1 的分支),根据我在网上阅读的内容(Escape string Python for MySQL),MySQLdb Python 查询应该这样编写以进行正确的转义:
query = self.conn.cursor()
query.execute('SELECT 1 FROM servers WHERE ip=%s AND port=%s AND game_id=%s' ,(ip,port,gameid))
不幸的是,当我这样做时,我收到以下错误:
% 不支持的操作数类型:“字节”和“元组”mysqldb
这似乎可行,但这可能导致 SQL 注入?
query = self.conn.cursor()
query.execute("SELECT 1 FROM servers WHERE ip='%s' AND port=%s AND game_id='%s'" % (ip,port,gameid))
那么,如何使用在 Python 3.4.3 中为我转义的首选语法方法安全地使上述查询正常工作?
解决方案
我无法让 mysqlclient(MySQLdb 的一个分支)https://pypi.org/project/mysqlclient/使用正确的 SQL 语法(为您转义所有内容的语法)与 Python 3.4 一起工作。我切换到 mysql-connector,现在相同的查询代码可以正常工作。它看起来像 mysqlclient 中的一个错误。
pip3 install mysql-connector-python
推荐阅读
- mysql - 如何确定特定 Mysql 用户每小时执行的查询
- google-cloud-platform - 如何将 Google spanner 查询结果导出到 .csv 或 google 表格?
- jquery - 表单提交后如何运行Jquery代码
- java - 具有非系统范围的 CookieHandler 的 HttpURLConnection
- javascript - 如何在有角度的情况下忽略引导类?
- javascript - 如何将回调分配给JS中的变量
- docker - Docker 教程上的连接被拒绝入门第 4 部分
- python - Python:读取 GuitarPro (.gp5) 文件
- kubernetes - google cloud集群kubernetes环境下的liveliness probe测试
- node.js - 如何解决 gyp ERR!堆栈错误:EACCES:权限被拒绝,mkdir ...node_modules 当我在 Ubuntu 16.04 上使用 sudo npm install 时