【问题标题】:How to prevent SQL injection using C# mongodb driver?如何使用 C# mongodb 驱动程序防止 SQL 注入?
【发布时间】: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|

能否请您帮我解决这个问题。

【问题讨论】:

  • 我对@9​​87654321@不熟悉,但我知道SELECT 0 FROM ###和Mongo没什么共同点
  • 请告诉我,是否可以防止这种类型的数据注入?
  • 我仍然面临 SQL 注入问题,请任何人帮助我解决这个问题。
  • @Aravinth 向我们展示了一些代码。你是如何构建你的 NoSQL 查询的?就像 dododo 所说的那样,您分享的内容看起来不像 NoSQL 查询。它看起来更像是 SQL 注入,因为 Qualys 似乎“注入”了 SLEEP 命令
  • 感谢您的回复@RomanCanlas。请参考下面我用来从集合中检索数据的代码。是否有可能使用 NoSQL/SQL 注入进行攻击,如果有,如何预防。 var _chatSessionCollection = Db.GetCollection(ConfigurationManager.AppSettings["chatsession"]); JObject dateFilter = new JObject(); jFilter.Add("botId", 1); jFilter.Add("status", status); var _chatSessionList = _chatSessionCollection.Find(Convert.ToString(jFilter)).ToList();

标签: mongodb-.net-driver qualys nosql-injection


【解决方案1】:

可能会在其中一个过滤器(状态)中注入任意代码。如果您只是期望接受字符的有限列表,我建议实施白名单

注意:我没有测试下面的代码,但我希望你能明白要点

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
猜你喜欢
  • 2018-08-27
  • 2021-05-01
  • 2016-08-04
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
相关资源
最近更新 更多