我有一段复杂的C++代码。它是一个FastCGI程序,使用FastCGI C++类库。
当我请求一个非常长的URL时,会出现以下情况:
*** stack smashing detected ***: ./tileserve terminated
Erreur de segmentation
对于实际应用,这不是问题,因为我从来没有使用过如此长的URL,但这意味着任何人都可以终止我的服务器...我不喜欢那样。
有没有工具可以找出这个问题出现在哪里?我该如何使用它?
编辑:已解决
我正在做这件事:
int len;
char uri[200];
len = strlen(request.params[std::string("REQUEST_URI")].c_str());
printf("%d\n", len);
if (len > 200) return 1;
strcpy(uri, request.params[std::string("REQUEST_URI")].c_str());
看起来 200
对于 len
测试来说太高了。实际上它在 194
处失败。
所以我改成了这样:
if (len > 190) return 1;
现在,没问题。
strcpy
这样的函数,因为这可能存在安全问题。相反,应该使用像strncpy
这样的函数,以确保您不会将太多内容复制到缓冲区中。 - Joakim