如何使用 C# mongodb 驱动程序防止 SQL 注入?
Posted
技术标签:
【中文标题】如何使用 C# mongodb 驱动程序防止 SQL 注入?【英文标题】:How to prevent SQL injection using C# mongodb driver? 【发布时间】:2020-11-19 04:19:34 【问题描述】:我正在使用 C# Mongodb 驱动程序在 Mongodb 中插入/更新数据。我已经通过“Qualys”扫描了我的 web api,它被插入到我的一个名为“createdOn”的字段中,我在下面提供了示例数据。
1.中太平洋标准时间 + (SELECT 0 FROM (SELECT 2. SLEEP(29))qsqli_1111) 中太平洋标准时间',0,0);WAITFOR 3. DELAY'00:00:29'-|ping -c2 -i91 localhost|
能否请您帮我解决这个问题。
【问题讨论】:
我对@987654321@不熟悉,但我知道SELECT 0 FROM ###
和Mongo没什么共同点
请告诉我,是否可以防止这种类型的数据注入?
我仍然面临 SQL 注入问题,请任何人帮助我解决这个问题。
@Aravinth 向我们展示了一些代码。你是如何构建你的 NoSQL 查询的?就像 dododo 所说的那样,您分享的内容看起来不像 NoSQL 查询。它看起来更像是 SQL 注入,因为 Qualys 似乎“注入”了 SLEEP 命令
感谢您的回复@RomanCanlas。请参考下面我用来从集合中检索数据的代码。是否有可能使用 NoSQL/SQL 注入进行攻击,如果有,如何预防。 var _chatSessionCollection = Db.GetCollection可能会在其中一个过滤器(状态)中注入任意代码。如果您只是期望接受字符的有限列表,我建议实施白名单
注意:我没有测试下面的代码,但我希望你能明白要点
Regex regex = new Regex(@"^[a-zA-Z0-9\s,]*$"); // alphanumeric pattern
if (regex.IsMatch(status))
chatSessionCollection = Db.GetCollection<ChatSessionModel(ConfigurationManager.AppSettings["chatsession"]);
JObject dateFilter = new JObject();
jFilter.Add("botId", 1);
jFilter.Add("status", status);
var _chatSessionList = _chatSessionCollection.Find(Convert.ToString(jFilter)).ToList();
else
return false;
【讨论】:
感谢@Roman Canlas,我将使用您的代码 sn-p。我相信主要目标是从输入数据中删除“$”符号。对吗? 没有。目标是只接受列入白名单的字符。我们不打算删除任何字符,但您也可以这样做,但它不会像将恕我直言列入白名单那样有效。你说的不一样,是消毒的过程。 我理解并感谢您的回复@Roman Canlas以上是关于如何使用 C# mongodb 驱动程序防止 SQL 注入?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# 驱动程序更新 MongoDB 数组中的子文档
如何使用 C# 驱动程序在 MongoDB 中更新和更新多个文档