printf和不安全的格式化字符串

Gep*_*ard 3 c printf user-input string-formatting

有问题的应用程序允许用户在纯文本配置文件中定义自己的消息(主要用于定制和/或本地化目的),这些消息在运行时传递给printf样式的函数.如果用户定义的格式化字符串有问题,可能会发生很多不好的事情.

清理这些用户输入的格式化字符串的最佳方法是什么?或者我应该完全放弃这种方法并使用另一种方法让用户安全地自定义消息?

解决方案必须以某种方式移植(Windows,Linux,BSD,x86,x86-64).

Sco*_*ter 5

定义您自己的格式化语言,您的代码将转换为有效的格式字符串,从而限制用户可以遇到的麻烦(例如,根本不允许%,并定义您自己的符号/标记用于指示%应该出现在输出中).