gpt4 book ai didi

c# - 右单引号 (Unicode :(U+2019) Extended Ascii 146) causes SQL injection through MySqlParameter

转载 作者:行者123 更新时间:2023-11-28 23:49:19 25 4
gpt4 key购买 nike

我遇到了一个相当奇怪的问题。

我们有一个 MySql 数据库在我们的 C#/Asp.Net 网络应用程序后面运行。

我们为每个查询使用参数以防止 SQL 注入(inject)攻击。

但是,我们最近从一个客户那里收到了奇怪的 SQL 错误。

经调查,我们发现客户一直在将包含“右单引号”(’) 字符的地址粘贴到我们网站的字段中。

令人惊讶的是,这似乎通过了我们代码的参数化部分,并被插入到查询中,因此我们的 MySQL 服务器将其解释为未转义的引号。

这意味着我们的客户在不知不觉中对我们的服务器执行了 SQL 注入(inject)攻击。

我有两个问题:

1) 这不是非常不安全吗?如果这对我们不利,是否还有其他公司可能会受到同样的安全漏洞的影响?

2) 我该如何解决这个问题?在参数化用户输入之前,是否有任何方法可以在不运行正则表达式或字符串替换的情况下清理此输入? (考虑到代码库的规模和我们拥有的编码人员的数量,这可能需要一个月的工作量)。

我们一直认为参数化可以防止集中的恶意攻击。不是这样吗?

规范:MySQLServer 5.6
MySql .Net 连接器 1.0.10.0
ASP.NET 4.5.1

感谢任何帮助或建议...

最佳答案

我认为问题在于 SQL Server 默认将命令视为 unicode,因此当您的 MySQL 数据库使用 ASCII 时,ASP.NET 不会费心清理 unicode 字符。

根据 this question ,应该可以通过使用以下命令更改您的表以允许正确的单引号:

ALTER TABLE [Table] COLLATE='utf8_unicode_ci';

来自 MySQL 文档 here ,看起来你可以在运行时为整个服务器设置字符集和排序规则模式。要测试它是否解决了您的问题,请尝试像这样启动 MySQL:

mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

关于c# - 右单引号 (Unicode :(U+2019) Extended Ascii 146) causes SQL injection through MySqlParameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32891739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com