gpt4 book ai didi

c - 使用 C 处理发布请求数据而不消耗不必要的内存的最佳方法

转载 作者:行者123 更新时间:2023-11-30 19:46:09 24 4
gpt4 key购买 nike

我正在创建一个网络应用程序并已经在后端工作。我需要使用appweb中提供的C和API来处理大量的post请求数据。

代码如下:

static void addStudentInformation()
{
char * average = malloc(30000);
MprJson * userInput = httpGetParams(getConn());

char * name;
strcpy(name,mprLookupJson(userInput, "name"));

average = computeGrade(mprLookupJson(userInput, "gradeSubject1_1"), mprLookupJson(userInput, "gradeSubject1_2"), mprLookupJson(userInput, "gradeSubject1_3"));

//more function calls

}

char * computeGrade(char * grade1, char * grade2, char * grade3)
{
/*process grade*/
return average;
}

//more function

如您所见,mprLookupJson返回的值直接用作computeGrade函数中的参数。我考虑不将这些值存储在变量中,因为在 addStudentInformation 中不需要/使用它。我认为分配/使用内存是没有意义的。现在,我的问题是这样做安全/良好的做法吗?是否有可能因此而出现安全问题?最好的方法是什么?

谢谢。

最佳答案

如果 mpfLookupJson(userInput, "name") 未找到有效条目,会发生什么情况?比如说,它传递 -1,因为它没有找到条目。在这种情况下,您的 strcpy() 可能会崩溃。

如果 mpfLookupJson 找到有效的内容,它将在堆上分配一些内存并为您提供指向它的指针。在这种情况下,内存已经被分配了。如果您再创建一个指向它的指针变量,我认为这并不重要。如果您编写一些特殊的微 Controller ,也许您必须或多或少地关心一些字节,但可能不在这里。

现在,您创建一个指针变量 name 并尝试将找到的值复制到 name 指向的位置。只要你不为name分配内存来指向,这就会崩溃。此外:您真的需要 mpfLookupJson 找到的值的副本吗?已经退回了,不能用吗?

在我看来,这已经足够了,更可靠且更具可读性:

static void addStudentInformation()
{
char * average = malloc(30000);
MprJson * userInput = httpGetParams(getConn());

char * name;
char * grade1;
char * grade2;
char * grade3;

name = mprLookupJson(userInput, "name");
grade1 = mprLookupJson(userInput, "gradeSubject1_1");
grade2 = mprLookupJson(userInput, "gradeSubject1_2");
grade3 = mprLookupJson(userInput, "gradeSubject1_3");

if (name <= 0 || grade1 <= 0 || grade2 <= 0 || grade3 <= 0 ) {
// handle error and / or abort
}

average = computeGrade(grade1, grade2, grade3);

//more function calls

...
}

那么,函数结束后会发生什么呢?如果内存对您很重要,请确保以正确的方式释放所有内容。

这些与其说是安全问题,不如说是安全问题。当有人滥用您的代码来获取管理员权限或使进程崩溃或内存被淹没时,安全性就开始了。首先要检查的点是 mprLookupJson 到底做了什么、userInput 的防篡改过滤效果如何,以及如果 namegrade1grade2 等都是无效的。仅出于这个原因,您就需要可读性良好的代码。

希望这些建议是一个好的开始:-)

关于c - 使用 C 处理发布请求数据而不消耗不必要的内存的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24443429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com