如何在免费后修复Veracode的使用(CWE ID 416)
Veracode的建议:确保一旦指向的内存被释放,所有指针都被设置为NULL。
错误指向:第8行“返回结果;
+ (NSData *)dataFromBase64String:(NSString *)aString
{
NSData *data = [aString dataUsingEncoding:NSASCIIStringEncoding];
size_t outputLength = 0;
void *outputBuffer = NewBase64Decode([data bytes], [data length], &outputLength);
NSData *result = [NSData dataWithBytes:outputBuffer length:outputLength];
free(outputBuffer);
return result;
}发布于 2021-09-16 00:09:51
Veracode扫描只会帮助您在代码中找到可以改进安全性相关编码的位置。当然,它并不能阻止攻击,但是如果您的应用程序确实是面向安全性的,那么读取处理后留下的内存就会变得更加困难。
Veracode日志中的"Error“一词可能被过度使用了。
但我的建议是.
+ (NSData *)dataFromBase64String:(NSString *)aString
{
if (aString!=nil && [aString length]) {
size_t outputLength = 0;
void *outputBuffer = NULL;
NSData *data = [aString dataUsingEncoding:NSASCIIStringEncoding];
outputBuffer = NewBase64Decode([data bytes], [data length], &outputLength);
if (outputBuffer==NULL) return nil; //if NewBase64Decode() failed there is nothing to free..
NSData *result = [NSData dataWithBytes:outputBuffer length:outputLength];
free(outputBuffer);
outputBuffer = NULL;
return result;
}
return nil;
}这是因为在没有您的意图的情况下,空闲内存不会设置为NULL,所以有人扫描内存以寻找遗留的内存,可能会发现一些关于以前地址内容的线索。
这里一些不错的讨论,如果空后免费是真正需要的。
如果您为了避免任何类型的风险而详细介绍了这些内容,那么您甚至可以在使用空(void* outputBuffer = NULL;)之前使用它来启动它。
这是另一个讨论,如果这对某些objC代码来说有点过了,那么只有晃动就可以覆盖整个方法。
编辑:更多的spagetti代码,试图避免返回除void以外的任何值,而是更改传递的参数。
+ (void)dataFromBase64String:(NSString *)aString toResult:(NSData**)result
{
if (aString!=nil && [aString length]) {
size_t outputLength = 0;
void *outputBuffer = NULL;
NSData *data = [aString dataUsingEncoding:NSASCIIStringEncoding];
outputBuffer = NewBase64Decode([data bytes], [data length], &outputLength);
if (outputBuffer==NULL) return; //if NewBase64Decode() failed there is nothing to do
*result = [NSData dataWithBytes:outputBuffer length:outputLength];
free(outputBuffer);
outputBuffer = NULL;
}
}
//and call like..
NSData *myresult = nil;
[YOURCLASS dataFromBase64String:@"someString" toResult:&myresult];
NSLog(@"result=%@",myresult);现在我想知道Veracode用上面的编辑报告了什么。
https://stackoverflow.com/questions/69086447
复制相似问题