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

2023-05-31数据库问题
8

本文介绍了必须转义哪些字符以防止 (My)SQL 注入?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我正在使用 MySQL API 的功能

I'm using MySQL API's function

mysql_real_escape_string()

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

Based on the documentation, it escapes the following characters:

\0
\n
\r
\
'
"
\Z

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

Now, I looked into OWASP.org's ESAPI security library and in the Python port it had the following code (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)?如果您进行查询,是否存在安全问题:

Now, I'm wondering whether all those characters are really needed to be escaped. I understand why % and _ are there, they are meta characters in LIKE operator, but I can't simply understand why did they add backspace and tabulator characters (\b \t)? Is there a security issue if you do a query:

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

用户输入包含制表符或退格字符的地方?

Where user input contains tabulators or backspace characters?

我的问题在这里:为什么他们在 ESAPI 安全库中包含 \b \t?在任何情况下,您可能需要转义这些字符吗?

My question is here: Why did they include \b \t in the ESAPI security library? Are there any situations where you might need to escape those characters?

推荐答案

MySQL字符串的手册页说:

  • \0 一个 ASCII NUL (0x00) 字符.
  • \' 一个单引号 ('") 字符.
  • \" 一个双引号 ("") 字符.
  • \b 一个退格字符.
  • \n 一个换行(换行)字符.
  • \r 一个回车符.
  • \t 一个制表符.
  • \Z ASCII 26 (Control-Z).请参阅表格后面的注释.
  • \\ 一个反斜杠(\")字符.
  • \% 一个%"字符.请参阅表格后面的注释.
  • \_ 一个_"字符.请参阅表格后面的注释.
  • \0An ASCII NUL (0x00) character.
  • \'A single quote ("'") character.
  • \"A double quote (""") character.
  • \bA backspace character.
  • \nA newline (linefeed) character.
  • \rA carriage return character.
  • \tA tab character.
  • \ZASCII 26 (Control-Z). See note following the table.
  • \\A backslash ("\") character.
  • \%A "%" character. See note following the table.
  • \_A "_" character. See note following the table.

这篇关于必须转义哪些字符以防止 (My)SQL 注入?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

Mysql目录里的ibtmp1文件过大造成磁盘占满的解决办法
ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在文件系统磁盘足够的情况下,这个文件大小是可以无限增长的。 为了避免ibtmp1文件无止境的暴涨导致...
2025-01-02 数据库问题
151

SQL 子句“GROUP BY 1"是什么意思?意思是?
What does SQL clause quot;GROUP BY 1quot; mean?(SQL 子句“GROUP BY 1是什么意思?意思是?)...
2024-04-16 数据库问题
62

MySQL groupwise MAX() 返回意外结果
MySQL groupwise MAX() returns unexpected results(MySQL groupwise MAX() 返回意外结果)...
2024-04-16 数据库问题
13

MySQL SELECT 按组最频繁
MySQL SELECT most frequent by group(MySQL SELECT 按组最频繁)...
2024-04-16 数据库问题
16

为什么 Mysql 的 Group By 和 Oracle 的 Group by 行为不同
Why Mysql#39;s Group By and Oracle#39;s Group by behaviours are different(为什么 Mysql 的 Group By 和 Oracle 的 Group by 行为不同)...
2024-04-16 数据库问题
13

MySQL GROUP BY DateTime +/- 3 秒
MySQL GROUP BY DateTime +/- 3 seconds(MySQL GROUP BY DateTime +/- 3 秒)...
2024-04-16 数据库问题
14