【问题标题】:Can Convert.ToBase64String(Encoding.UTF8.GetBytes(input)) prevent Command Injection?Convert.ToBase64String(Encoding.UTF8.GetBytes(input)) 可以防止命令注入吗?
【发布时间】:2022-01-05 10:09:41
【问题描述】:

根据我的经验,我们可以使用replace()过滤&&|来防止命令注入。

我们的代码需要将base64String发送到另一个进程,但是checkmarx扫描到有Stored Command InjectionConvert.ToBase64String(Encoding.UTF8.GetBytes(jsonFromDb))可以处理吗?或者我们仍然需要更换

【问题讨论】:

    标签: security checkmarx commandinjection


    【解决方案1】:

    好问题。我认为您仍然应该确保使用prepared statements。 Base64 仅包含 ABC(大写和小写)字母、数字、+/= 作为最终填充字符。这不提供引号等字符。

    但是,如果有人决定使用不同的字母表会怎样?如果有人认为 base 64 是浪费空间怎么办?因为如果将现有文本转换为 base 64 肯定就是这样。然后你会突然遇到问题。

    总而言之,使用准备好的语句更安全、更高效,是处理命令注入的最佳方式。作为一个额外的好处,你会摆脱那个讨厌的 checkmarx。


    如果绝对没有其他方法可以更改其他进程,并且如果无法达到该进程,我只会使用 base 64。在这种情况下,您可能希望使用 base64url,因为使用 _- 而不是 +/=,您可能会做的更少。

    但老实说,该代码需要立即清理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-02
      • 2016-09-12
      • 1970-01-01
      • 2018-04-07
      • 2013-06-04
      • 2022-01-15
      • 2012-07-30
      • 2018-01-06
      相关资源
      最近更新 更多