右单引号(Unicode:(U+2019) Extended Ascii 146)导致通过MySqlParameter注入SQL
Right single quotation mark (Unicode:(U+2019) Extended Ascii 146) causes SQL injection through MySqlParameter
我 运行 遇到了一个相当奇怪的问题。
我们的 C#/Asp.Net 网络应用程序后面有一个 MySql 数据库 运行ning。
我们为每个查询使用参数以防止 SQL 注入攻击。
然而,我们最近收到来自单个客户的奇怪 SQL 错误。
经调查,我们发现客户一直在将包含 "Right single quotation mark" (') 字符的地址粘贴到我们网站的字段中。
令人惊讶的是,这似乎通过了我们代码的参数化部分,并被插入到查询中,因此我们的 MySQL 服务器将其解释为未转义的引号。
这意味着我们的客户在不知不觉中对我们的服务器执行了 SQL 注入攻击。
我有两个问题:
1) 这不是非常不安全吗?如果这对我们不利,是否还有其他公司可能会受到同样的安全漏洞的影响?
2) 我该如何解决这个问题?在参数化用户输入之前,如果不使用正则表达式或字符串替换 运行 ,是否有任何方法可以净化此输入? (考虑到代码库的规模和我们拥有的编码人员的数量,这可能会占用一个月的工作量)。
我们一直认为参数化可以防止集中的恶意攻击。不是这样吗?
规格:
MySQL服务器 5.6
MySql.Net 连接器 1.0.10.0
Asp.Net 4.5.1
感谢任何帮助或建议...
我认为问题在于 SQL 服务器默认将命令视为 unicode,因此 ASP.NET 不会清理 unicode 字符,而您的 MySQL 数据库正在使用ASCII.
根据 this question,应该可以使用以下命令更改 table 以允许使用正确的单引号:
ALTER TABLE [Table] COLLATE='utf8_unicode_ci';
根据 MySQL 文档 here,您似乎可以在运行时为整个服务器设置字符集和排序规则模式。要测试它是否解决了您的问题,请尝试像这样启动 MySQL:
mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
我 运行 遇到了一个相当奇怪的问题。
我们的 C#/Asp.Net 网络应用程序后面有一个 MySql 数据库 运行ning。
我们为每个查询使用参数以防止 SQL 注入攻击。
然而,我们最近收到来自单个客户的奇怪 SQL 错误。
经调查,我们发现客户一直在将包含 "Right single quotation mark" (') 字符的地址粘贴到我们网站的字段中。
令人惊讶的是,这似乎通过了我们代码的参数化部分,并被插入到查询中,因此我们的 MySQL 服务器将其解释为未转义的引号。
这意味着我们的客户在不知不觉中对我们的服务器执行了 SQL 注入攻击。
我有两个问题:
1) 这不是非常不安全吗?如果这对我们不利,是否还有其他公司可能会受到同样的安全漏洞的影响?
2) 我该如何解决这个问题?在参数化用户输入之前,如果不使用正则表达式或字符串替换 运行 ,是否有任何方法可以净化此输入? (考虑到代码库的规模和我们拥有的编码人员的数量,这可能会占用一个月的工作量)。
我们一直认为参数化可以防止集中的恶意攻击。不是这样吗?
规格:
MySQL服务器 5.6
MySql.Net 连接器 1.0.10.0
Asp.Net 4.5.1
感谢任何帮助或建议...
我认为问题在于 SQL 服务器默认将命令视为 unicode,因此 ASP.NET 不会清理 unicode 字符,而您的 MySQL 数据库正在使用ASCII.
根据 this question,应该可以使用以下命令更改 table 以允许使用正确的单引号:
ALTER TABLE [Table] COLLATE='utf8_unicode_ci';
根据 MySQL 文档 here,您似乎可以在运行时为整个服务器设置字符集和排序规则模式。要测试它是否解决了您的问题,请尝试像这样启动 MySQL:
mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci