mkdir()和“检查时间、使用时间”漏洞
对于 C 语言,是否有安全的 mkdir()
替代方案?我正在检查一些代码,并注意到它正在使用对 mkdir()
的调用。根据我在 US-CERT 安全编码网站上读到的内容,使用该功能使其容易受到“检查时间、使用时间”(TOCTOU) 的影响。
编辑
来自 zlib 的 miniunz.c 源
int mymkdir(dirname)
const char* dirname;
{
int ret=0;
#ifdef WIN32
ret = mkdir(dirname);
#else
#ifdef unix
ret = mkdir (dirname,0775);
#endif
#endif
return ret;
}
上面的 mkdir
就是我所指的。
Is there a secure alternative to mkdir()
for C? I am examining some code and notice it is using calls to mkdir()
. From what I have read on the US-CERT Secure Coding site, use of that function leaves it vulnerable to "Time of Check, Time of Use" (TOCTOU).
Edit
From the miniunz.c source for zlib
int mymkdir(dirname)
const char* dirname;
{
int ret=0;
#ifdef WIN32
ret = mkdir(dirname);
#else
#ifdef unix
ret = mkdir (dirname,0775);
#endif
#endif
return ret;
}
The mkdir
above is what I am referring to.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你的问题有点模糊;参考 US-CERT 文档和一些示例代码会很好。
尽管如此,我打赌答案是mkdirat()。
Your question is a little vague; a reference to the US-CERT document and some sample code would be nice.
Nevertheless, I bet the answer is mkdirat().
mkdir()
只是 TOCTOU - 检查时间、使用时间(在检查目录是否存在之前)。在您的示例中,如果调用代码执行正确的操作,则上面的用法是可以的。检查扎克的评论。
mkdir()
is only TOCTOU - Time of Check, Time of Use when it's preceded by a check to see if the directory exists.The usage above, in your example, is ok if the calling code does the right thing. Check Zack's comment.