繁体   English   中英

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

[英]printf and unsafe formatting strings

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

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

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

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

你有两个选择:

  1. 让用户的混乱(有意或无意) 弄乱自己,即不要让用户的个人配置互相干扰

  2. 不要让用户自定义结果。 或者,如果你这样做,那么使定制变得如此有限,以至于他们无法做任何有害的事情。
    例如,我经常做一些事情,允许用户提供自己的输入,如printf() ,但过滤器只允许具有特定(非常有限)字符集的东西。 例如,我将使用^[a-zA-Z0-9_]+$类的正则表达式,不要让任何其他内容。

只要您提供定制,就可以打开问题的大门。 在这些场地小心行走。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM