1

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

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

4

1 回答 1

1

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

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

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


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

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

于 2022-01-06T02:05:53.963 回答