mysql - nbsp 字符可能不会作为 nbsp 传递到 MySQL 后端

标签 mysql character-encoding character

我正在遵循一个教程,其中用 PHP 编写的 Web 应用程序将输入中的空格(“id”参数)列入黑名单。任务是添加其他字符,这基本上绕过了这个黑名单,但仍然由后端的 MySQL 数据库解释。考虑到 nbsp 字符没有列入黑名单,我构造了一个像这样的 URL - http://192.168.2.15/sqli-labs/Less-26/?id=1'%C2%A0||%C2A0'1 ,其中 C2A0 是 nbsp 字符的 UTF-8 表示形式。然而,这会引发 MySQL 错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 ' || 附近使用的正确语法。 '1' LIMIT 0,1' 在第 1 行

我将数据库上运行的 SQL 查询字符串反射回页面

从用户中选择 * WHERE id='1' || '1'限制0,1

这个查询对我来说似乎没问题,它不应该抛出错误。我怀疑这可能与字符集有关。但我对 MySQL 中的字符集以及在什么情况下适用哪种字符集的了解非常有限。

运行时看到的内容显示变量如'char%';

+--------------------------------------+---------------------- ------+ |变量名 |值(value)| +--------------------------------------+---------------------- ------+ |字符集客户端 | UTF8 | |字符集连接 | UTF8 | |字符集数据库 |国语 | |字符集文件系统 |二进制 | |字符集结果 | UTF8 | |字符集服务器 |拉丁语1 | |字符集系统 | UTF8 | |字符集目录 |/usr/share/mysql/charsets/|/usr/share/mysql/charsets/| +--------------------------------------+---------------------- ------+

最佳答案

MySQL 语法无法识别 utf8 C2A0
在此测试中,请注意常规空格 (20) 和 NO-BREAK SPACE (C2A0):

mysql> select UNHEX('53454C45435420313B'), UNHEX('53454C454354C2A0323B');
+-----------------------------+-------------------------------+
| UNHEX('53454C45435420313B') | UNHEX('53454C454354C2A0323B') |
+-----------------------------+-------------------------------+
| SELECT 1;                   | SELECT 2;                     |
+-----------------------------+-------------------------------+
1 row in set (0.00 sec)

然后我复制了这两条语句:

mysql> SELECT 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

mysql> SELECT 2;
ERROR 1064 (42000): You have an error in your SQL syntax; check
   the manual that corresponds to your MySQL server version
   for the right syntax to use near 'SELECT 2' at line 1

关于mysql - nbsp 字符可能不会作为 nbsp 传递到 MySQL 后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31199679/

相关文章:

mysql - 为所选 ID 选择每天的最大日期

html - 浏览器如何处理指定字符编码的 <meta> 标签?

javascript - 在javascript中计算精确的字符\字符串高度

php - 如何在codeigniter中将数组创建为数组

mysql - 从表中存储的列表中选择每个表的计数

javascript - Javascript 无法正确读取 ASCII > 128 的字符

java - 消息字符集

java - 在Java中,使用从InputStream.read()返回的int来调用Character.isXxx()方法是否安全?

javascript - 将字符串中的相同字符替换为数组,但每次出现时都使用下一个条目

mysql - 即使更改 my.cnf 文件后,group_concat_max_length 系统变量也未更改