c - sscanf 是否被认为可以安全使用?

标签 c security buffer-overflow scanf

我对 sscanf 不好的建议有模糊的内存。我知道如果我使用字段宽度说明符它不会溢出缓冲区,所以我的内存只是在跟我开玩笑吗?

最佳答案

我认为这取决于您如何使用它:如果您正在扫描 int 之类的东西,那很好。如果您正在扫描一个字符串,则它不是(除非我忘记了一个宽度字段?)。


编辑:

扫描字符串并不总是安全的。

如果您的缓冲区大小是一个常量,那么您当然可以将其指定为类似 %20s 的内容。但如果它不是常量,则需要在格式字符串中指定它,并且需要执行以下操作:

char format[80]; //Make sure this is big enough... kinda painful
sprintf(format, "%%%ds", cchBuffer - 1); //Don't miss the percent signs and - 1!
sscanf(format, input); //Good luck

这是可能的,但非常容易出错,就像我在之前的编辑中所做的那样(忘记处理空终止符)。您甚至可能会溢出格式字符串缓冲区。

关于c - sscanf 是否被认为可以安全使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873402/

相关文章:

c - C语言输入后没有换行符

c - 检索给定 IP 地址的 Mac 地址

buffer-overflow - 地址中存在 NULL 字符导致缓冲区溢出

c - 如何写入正在运行的程序的标准输入

security - Adfs: token 解密证书和依赖方签名验证证书之间的区别

operating-system - 堆栈溢出和缓冲区溢出有什么区别?

c - 如何获取物理 CPU 数 :s in Linux using C?

c - 为什么我需要刷新我的 I/O 流以获得正确的结果?

javascript - 为什么注入(inject) JavaScript 代码是个坏主意

java - SSL HandShakeException : No_Certificate. 使用 IBM 的 J9 JVM 和 Apache Tomcat