use*_*224 9 c unix environment-variables getenv
我正在尝试编写在UNIX环境中使用一些ENV变量的C代码.问题是:读取变量(例如getenv())会导致缓冲区溢出吗?此外,如何找到我的平台的env变量大小的限制?例如哪个头文件?
最后,阅读环境提供的变量中最安全的代码实践是什么?
读取环境变量getenv()不会导致缓冲区溢出.
在Linux上,内核将继承的环境变量及其值存储在进程地址空间中exec().该getenv()函数只返回指向此现有数据的指针.由于它不复制任何数据,因此没有缓冲区,也没有缓冲区溢出.
如果您尝试将过多的环境变量传递给新进程,exec()则会发出E2BIG错误信号.
环境变量实际上没有任何缓冲区溢出问题.
安全问题的核心是您不应该信任环境的内容.如果您的程序运行setuid(或setgid等),则环境是攻击向量.用户可以以恶意方式设置PATH或LD_PRELOAD其他变量.
但是,编写setuid程序很少见.这是一件好事,因为有很多理由说明为什么很难使setuid程序安全.