安全处理字符串变量

lig*_*ber 3 c security string variables printf

你好,我对C很新,简而言之,我在课堂上做了以下工作:

foo (char *var) {
  printf(var);
}
Run Code Online (Sandbox Code Playgroud)

我被告知这是不好的做法和不安全但我的导师没有得到关于此的详细信息.我假设如果var的字符串值可由用户控制,它可能用于执行缓冲区溢出?我如何正确强化此代码?我是否必须限制str长度?

干杯谢谢!

Ric*_*dle 6

你应该使用:

printf("%s", var);
Run Code Online (Sandbox Code Playgroud)

代替.你拥有它的方式,我可以输入%s作为我的输入,并printf在寻找要打印的字符串时读取随机的内存.这可能会导致任何意外的行为.


Dav*_*rra 6

这是UNSAFE,因为它可能导致格式字符串攻击