必须转义哪些字符才能防止 (My)SQL 注入?

2024-03-09

我正在使用 MySQL API 的功能

mysql_real_escape_string()

根据文档,它转义了以下字符:

\0
\n
\r
\
'
"
\Z

现在,我查看了 OWASP.org 的 ESAPI 安全库,在 Python 端口中它有以下代码(http://code.google.com/p/owasp-esapi-python/source/browse/esapi/codecs/mysql.py http://code.google.com/p/owasp-esapi-python/source/browse/esapi/codecs/mysql.py):

        """
        Encodes a character for MySQL.
        """
        lookup = {
        0x00 : "\\0",
        0x08 : "\\b",
        0x09 : "\\t",
        0x0a : "\\n",
        0x0d : "\\r",
        0x1a : "\\Z",
        0x22 : '\\"',
        0x25 : "\\%",
        0x27 : "\\'",
        0x5c : "\\\\",
        0x5f : "\\_",
        }

现在,我想知道是否真的需要转义所有这些字符。我明白为什么 % 和 _ 在那里,它们是 LIKE 运算符中的元字符,但我无法简单地理解为什么它们添加退格键和制表符字符 (\b \t)?如果您进行以下查询,是否存在安全问题:

SELECT a FROM b WHERE c = '...user input ...';

用户输入中哪里包含制表符或退格字符?

我的问题是:为什么他们在 ESAPI 安全库中包含 \b \t ?在那儿any您可能需要转义这些字符的情况?


关于退格字符的猜测:假设我向您发送一封电子邮件“嗨,这是根据您的需要更新数据库的查询”和一个附加的文本文件

INSERT INTO students VALUES ("Bobby Tables",12,"abc",3.6);

你对文件进行cat,看看它没问题,然后将文件通过管道传输到MySQL。然而你不知道的是我把

DROP TABLE students;\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b

在您没有看到的 INSERT 语句之前,因为在控制台输出上退格键覆盖了它。嘭!

不过,这只是一个猜测。

编辑(无法抗拒):

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

必须转义哪些字符才能防止 (My)SQL 注入? 的相关文章

  • 尝试在 React 应用程序中连接到 MySQL 数据库时,无法读取未定义的属性(读取“查询”)错误

    我正在尝试连接到 MySQL 数据库并在单击按钮后在 React 应用程序中运行查询 一些它如何给出错误 我当前的代码如下所示 import mysql from mysql function App async function sync
  • 我可以将 MAMP (MySQL) 或 XAMPP (MySQL) 与 Ruby on Rails 3 一起使用吗?

    我可以将 MAMP MySQL 或 XAMPP MySQL 与 Ruby on Rails 3 一起使用吗 我从 MYSQL com 安装了 MySQL 但遇到了很多麻烦 所以我喜欢使用 MAMP XAMPP Mysql 有人这样做吗 另外
  • 一个表可以有多个主键吗?

    我现在很困惑 也许你可以帮助我更好地理解这个问题 即一个表可以有两个主键 如果是 那么如何 如果没有 那为什么 您询问是否可以有多个主键field你当然可以 您只能有一个主键 但它可以包含唯一标识行所需的任意数量的列 创建表时使用类似这样的
  • 何时在 mysql 中使用 Union [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于 Union 您会在什么现实情况下使用它 因为对我来说 对具有不同列用途 含义的两个表中的两个选择查询使用联合是没有意义的 例如
  • 如何使用wireshark清晰捕获mysql查询sql

    因为我们使用远程开发Mysql服务器 所以不能轻易检查查询sql 如果使用本地服务器可以tail f general log file查看调用某个http接口时执行了哪些sql 所以我安装了一个wireshark捕获这些从本地发送的查询sq
  • 如何导出带有数据的 MySQL 架构?

    我有一个完整的架构 其中有许多表 其中包含 MySQL 查询浏览器中的数据 现在我想将这个包含所有表 数据的完整数据库发送给我的同事 我怎样才能将其发送给我的同事 以便他可以将这个完整的架构放入他的 MySQL 查询浏览器中 Thanks
  • MySQL Python 关于重复键更新值

    我正在研究使用 python 将 JSON 数据上传到 MySQL 我需要在插入语句中包含 ON DUPLICATE KEY UPDATE VALUES 但在 Python 中遇到了问题 如果我运行以下代码 一切正常 import json
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • MySQL - 多个结果集

    我正在使用 NET Connector 连接到 MySQL 在我的应用程序中 很少有线程使用相同的连接 因此如果 MySQLDataReader 尚未关闭并且某个线程正在尝试执行查询 则会出现该错误 已经有一个打开的 DataReader
  • 日期时间与时间戳字段

    我是 MySQL 数据库的新手 您是否建议在表创建中使用日期时间或时间戳字段以及原因 我正在使用 MySQL 5 7 和 innodb 引擎 Thanks 我会用TIMESTAMP对于任何需要自动管理的事情 因为它支持诸如ON UPDATE
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不
  • 使用“INSERT ... ON DUPLICATE KEY UPDATE”插入多条记录

    我的表结构 table marks 我的目标 我想用条件插入或更新多条记录 我目前正在通过此查询进行检查 第一步 SELECT FROM marks WHERE student 115 AND param 1 第二步 if records
  • 连接到 OpenShift (Redhat Paas) mysql 实例

    我正在尝试将我的 C 应用程序与 openshift 数据库连接 但我得到了这个例外conn Open Eccezione gt MySql Data MySqlClient MySqlException 0x80004005 Unable
  • 日志锻造强化修复

    我正在使用 Fortify SCA 来查找我的应用程序中的安全问题 作为大学作业 我遇到了一些无法解决的 日志锻造 问题 基本上 我记录一些来自 Web 界面的用户输入的值 logger warn current id not valid
  • MVCC 如何与 MySql 中的 Lock 配合使用?

    我知道Mysql中使用锁或者MVCC可以实现并发控制 比如可重复读 但我不知道MVCC如何避免幻读 在其他地方了解到一般是通过MVCC和Gap Lock来实现的 但是目前我理解的是MVCC不需要锁 即更新和删除都是使用undo log来实现
  • MySQL - 从数字列表中选择在表的 id 字段中没有对应项的数字

    我有一个数字列表 例如 2 4 5 6 7 我有一个表 foos 带有 foos ID 包括 1 2 3 4 8 9 我想获取我的号码列表 并在我的表的 ID 字段中找到那些没有对应项的号码 实现此目的的一种方法是创建一个表格栏 在 ID
  • 使用用户定义函数 MySql 时出错

    您好 请帮我解决这个问题 提前致谢 我在数据库中定义了这些函数 CREATE FUNCTION levenshtein s1 VARCHAR 255 s2 VARCHAR 255 RETURNS INT DETERMINISTIC BEGI
  • rake db 问题:迁移 -

    我无法为 Ruby on Rails 设置 MySQL 数据库 设置数据库并确保 config database yml 文件匹配后 我遇到了以下错误消息 U Rails alpha gt rake db migrate trace in

随机推荐

  • WCF 与 Flash 教程

    我是 WCF 的初学者 我选择 WCF 而不是 Web 服务 因为我读过的所有文章和博客似乎都指出 ASMX 已经是旧闻了 我读过一些有关旧 Web 服务和 WCF 之间差异的内容 并且了解了总体思路 我也采取了MSDN WCF 教程 ht
  • Node.js / Express.js - 如何覆盖/拦截 res.render 函数?

    我正在使用 Connect Express js 构建 Node js 应用程序 并且我想拦截 res render view option 函数以运行一些代码 然后再将其转发到原始渲染函数 app get someUrl function
  • 如何更改所用纱线的版本?

    我使用Homebrew安装yarn 跑步yarn v显示我目前使用0 23 2 I ran brew upgrade yarn获取最新版本 即0 24 6 Homebrew成功升级后yarn I run yarn v又来了 不过版本还是0
  • MvvmCross 自定义事件绑定事件参数

    我使用 MvvmCross 在 EditText 上为 FocusChange 事件创建了自定义绑定 我可以绑定事件并触发 但我不知道如何传递事件参数 我的自定义绑定是这样的 using Android Views using Androi
  • 使用 python 在 CSV 文件中搜索字符串并写入结果

    usr bin python import csv import re string 1 OneTouch AT string 2 LinkRunner AT string 3 AirCheck searched OneTouch AT L
  • R 中的左移列

    我有一个这样的数据集 temp lt structure list col 1 c P9603 11040 80053 col 2 c 84484 80061 80061 A0428 85025 col 3 c V2632 82310 86
  • 谷歌电子表格公式中的多个嵌套 if 块

    我试图编写一个嵌套的 if 语句 如下伪代码 IF h4 1 CORRECT IF h4 2 CORRECT IF h4 3 CORRECT IF h4 4 CORRECT 但是 如果我写出代码并每次添加 if 语句 我会收到以下错误 IE
  • 使用 PHP 将时间添加 30 秒

    我怎样才能给这个时间加上30秒呢 time date m d Y h i s a time 我不知道该怎么做 因为它显示了很多不同的时间单位 而我只想添加 30 秒 time date m d Y h i s a time 30
  • 输入大数以避免 NumberFormatException

    我必须控制从1到9999999999的输入 代表学校的注册号 原始类型 long 只能容纳大约 2 000 000 000 我如何存储这个大小的数字 根据this http docs oracle com javase tutorial j
  • www.sandbox.itunes.apple.com 已关闭

    在此先感谢您的帮助 具体问题 由于在沙盒环境中测试应用内购买时出现错误 1001 无法连接到 iTunes 商店 知道是否重要吗 www sandbox itunes apple com下降了吗 如果没有 我怎么知道苹果的沙盒是否已关闭 背
  • 如何创建一个所有字段都是公共的公共结构,而无需为每个字段重复“pub”?

    如何在 Rust 中定义一个公共结构 其中所有字段都是公共的 而不必重复pub每个字段前面的修饰符 A pub struct宏将是理想的 pub struct Foo a i32 b f64 这相当于 pub struct Foo pub
  • 如何创建动画切换按钮?

    是的 我可以创建带有 2 张图片的 ToggleButton 开 关 但我想创建带有 3 5 张图片的 ToggleButton 例如 什么时候关闭 我单击 关闭图片 中图 图片上 它什么时候开启 我点击 图片上 中图 关闭图片 所以它就像
  • 带有 postgres 的游标,数据存储在哪里以及对数据库的调用次数

    您好 我正在使用 psycopg2 进行 postgres 访问 我试图了解 光标 存储返回的行的位置 是将其作为临时表存储在数据库中还是存储在客户端 游标 当您指定获取多行时 是否一次命中数据库一个查询 或者它是否命中数据库一次 获取第一
  • android - 无需root即可将字体安装到android平台

    我开发了一个新的应用程序 它是一种古老的埃及语言 科普特语 我需要在 Android 平台上安装特定的字体 使这种语言可读 我搜索是否找到应用程序执行相同的功能iFont 另外 当我访问字体文件夹时 我发现它允许安装字体 在线获取字体 那么
  • Javascript 数组分页

    我正在尝试编写一个 Javascript 函数 该函数需要array page size and page number作为参数并返回一个模仿分页结果的数组 paginate function array page size page nu
  • 我可以用64位jre运行使用32位jdk开发的java程序吗?应用程序使用32位非java系统库

    我正在 64 位 Windows 7 安装上使用 64 位 eclipse 开发一个 java 应用程序 我被迫使用 32 位 JDK 1 7 0 因为应用程序使用Jpcap http netresearch ics uci edu kfu
  • iPhone X如何处理View Controller inputAccessoryView?

    我有一个消息应用程序 它具有典型的 UI 设计 即全屏表格视图底部的文本字段 我将该文本字段设置为视图控制器的inputAccessoryView并打电话ViewController becomeFirstResponder 以使该字段显示
  • Javascript 文字处理器/编辑器(或 Google Docs 架构)[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我认为像 Google 文档那样推出
  • 如何简单计算从一点到另一点的旅行时间? (无剧情)

    我花了很多时间阅读和测试OSMnx 的示例笔记本 https github com gboeing osmnx examples但我无法找到一种方法来简单地计算从给定点 GPS 坐标 到另一个点的旅行时间 我想估计 对于列表中的每个点 到达
  • 必须转义哪些字符才能防止 (My)SQL 注入?

    我正在使用 MySQL API 的功能 mysql real escape string 根据文档 它转义了以下字符 0 n r Z 现在 我查看了 OWASP org 的 ESAPI 安全库 在 Python 端口中它有以下代码 http