user_input = "%s%s%s%s%s%s%s%s";
printf("user input is: %s", user_input);
......崩溃!
以上行会导致错误。我想编写一个可以像printf
一样使用的函数,但可以在第一个之后清理所有参数,以确保它们不包含%
符号。该函数应该像'printf'一样使用,因为它可以使用任意数量的参数,并以相同的方式打印出一个字符串。如果其他参数包含%
符号,我只想在将该符号放入格式字符串之前将其取出。
如果这个新函数被称为safe_printf
,我希望行为如下:
user_input = "%s%s%s%s%s%s%s%s";
safe_printf("user input is: %s, user_input);
用户输入是:ssssssss
似乎写这样的函数可能是不可能的,(我无法弄清楚如何在不知道有多少的情况下预处理va_list中的char *)如果是这种情况请告诉我。谢谢!
答案 0 :(得分:0)
如果将用户提供的输入传递给printf(3)
函数,则存在字符串格式设置漏洞。您可以通过不允许发生这种情况来阻止这种情况,永远。绝对没有理由拥有动态格式字符串,因为您应该提前知道所需的格式,因此您可以通过使用const char *