将不受信任的格式字符串传递给string.Format是否安全?

时间:2014-08-08 13:13:17

标签: .net string-formatting

  • 将用户提供的(不受信任的)格式字符串传递给string.Format是否存在安全隐患?

  • 这会导致意外的代码执行吗?它会导致无限的CPU或内存消耗吗?

请假设以下是不受信任的输入:

  • 格式字符串
  • 所有参数(假设它们是原始类型,如整数,字符串,日期时间。当然没有用户提供的类型。)
  • 文化

抛出异常不是问题,因为这很容易处理。

1 个答案:

答案 0 :(得分:5)

可以使用相当小的格式字符串生成非常长的输出。这可能会导致性能问题,甚至可能导致内存不足错误。

例如string.Format("{0,9999999}",0)生成一个消耗20MB RAM的字符串。您可以重复该模式以进一步增加输出大小。