Vis*_*was 0 c c++ printf pointers
我在Quora上读到一个答案,我遇到了一些简单的事情:
char* inputString;
printf(inputString);
Run Code Online (Sandbox Code Playgroud)
是一个安全漏洞.
我假设inputString不是简单的未初始化,而是在两个语句之间用一些外部输入初始化.
如何准确,这是一个安全漏洞?
Quora的原始答案在这里:
但它没有为此声明提供额外的背景信息.
它不仅仅是一个安全问题,而且根本不起作用,因为指针未初始化.在这种情况下,使程序崩溃=不再运行可能是一个(安全)问题,取决于程序的作用以及它运行的上下文.
我猜你的意思是你有一个合适的字符串.在这种情况下,如果字符串是由一些外部输入(用户等)的提供,可以有像%S等而printf的其余预计例如(意想不到)占位符.广告.对于这个例子(%s而不是%d),它将开始打印所有内存内容,直到某个0字节,而不是打印一个整数,然后可能会发出一些存储在int字节之后的秘密信息.
类似的东西,即.由于错误的未经检查的用户输入而发出太多字节,例如发生.在不久前已知的"Heartbleed"漏洞中,这是一个非常大的全球性问题....第一个printf参数应该是固定的,而不是来自任何变量.
其他占位符组合也是可能的,导致各种可能的影响(包括在CPU中生成错误的浮点信号,这可能会导致更严重的问题,具体取决于架构等等).