【问题标题】: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 Injection,Convert.ToBase64String(Encoding.UTF8.GetBytes(jsonFromDb))可以处理吗?或者我们仍然需要更换
【问题讨论】:
标签:
security
checkmarx
commandinjection
【解决方案1】:
好问题。我认为您仍然应该确保使用prepared statements。 Base64 仅包含 ABC(大写和小写)字母、数字、+、/ 和 = 作为最终填充字符。这不提供引号等字符。
但是,如果有人决定使用不同的字母表会怎样?如果有人认为 base 64 是浪费空间怎么办?因为如果将现有文本转换为 base 64 肯定就是这样。然后你会突然遇到问题。
总而言之,使用准备好的语句更安全、更高效,是处理命令注入的最佳方式。作为一个额外的好处,你会摆脱那个讨厌的 checkmarx。
如果绝对没有其他方法可以更改其他进程,并且如果无法达到该进程,我只会使用 base 64。在这种情况下,您可能希望使用 base64url,因为使用 _ 和 - 而不是 +、/ 和 =,您可能会做的更少。
但老实说,该代码需要立即清理。