我们目前正在构建一个执行大量外部工具的应用程序。我们经常需要将由用户输入到我们系统中的信息传递给这些工具。防止命令行注入攻击
显然,这是一个很大的安全噩梦等待发生。
不幸的是,我们还没有发现.NET框架中的任何类可以执行命令行程序,同时提供与IDbCommand对象针对数据库相同的注入攻击防范。
现在,我们使用一个非常原始的字符串替换我怀疑是相当不足:
protected virtual string Escape(string value) { return value .Replace(@"\", @"\\") .Replace(@"$", @"\$") .Replace(@"""", @"\""") .Replace("`", "'") ; }
你们有什么做,以防止命令行注入攻击?我们计划实现一个非常严格的正则表达式,只允许通过一小部分字符,但我想知道是否有更好的方法。
一些澄清:
- 有些工具不具备,我们可以对编程的API。如果他们这样做,我们不会有这个问题。
- 用户不会选择要执行的工具,而是输入我们选择的工具使用的元数据(例如,将元数据(如版权声明)注入到目标文件中)。