【发布时间】:2011-08-18 21:46:19
【问题描述】:
我的老板让我查看以下代码并告诉他潜在的安全漏洞是什么。我不太擅长这种事情,因为我不认为试图破解代码。我所看到的是没有任何东西被宣布为私有的,但除此之外我不知道。
#define NAME_SIZE (unsigned char) 255
// user input should contain the user’s name (first name space
// middle initial space last name and a null
// character), and was entered directly by the user.
// Returns the first character in the user input, or -1 if the method failed.
char poor_method(char* user_input, char* first, char *middle, char* last)
{
char*buffer;
char length;
// find first name
buffer = strtok(user_input, " ");
if(buffer==0)
{
return -1;
}
length = strlen(buffer);
if(length <= NAME_SIZE)
{
strcpy(first, buffer);
}
// find middle name
buffer = strtok(NULL, " ");
if(buffer==0)
{
return-1;
}
if(middle)
*middle = buffer[0];
// find last name
buffer = strtok(NULL, "\0");
length = strlen(buffer);
if(length <= NAME_SIZE)
{
strcpy(last, buffer);
}
// Check to make sure that all of the user input was used
buffer = strtok(NULL, "\0");
if(buffer != NULL)
{
return-1;
}
return first[0];
}
存在哪些安全漏洞?
【问题讨论】:
-
扔掉它,用适当的 C++ 方式编写它。对于初学者来说,strtok 不是线程安全的。
-
我希望你的老板不是这样。 ;) 通过“安全”,您似乎认为它与黑客攻击有关。难道他不能简单地表示记忆问题、输入格式错误等。也许这可能不是你的舒适区?
-
@Bart 也许他知道。当我听到安全性时,我只是假设黑客攻击。我就这样看!
-
strtok,取决于 C 运行时,是线程安全的。
-
查找Buffer Overflow。你也可以搜索ITsec.SE
标签: c++ security code-access-security