首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Veracode CWE ID 416:免费后使用

Veracode CWE ID 416:免费后使用
EN

Stack Overflow用户
提问于 2021-09-07 10:23:00
回答 1查看 97关注 0票数 0

如何在免费后修复Veracode的使用(CWE ID 416)

Veracode的建议:确保一旦指向的内存被释放,所有指针都被设置为NULL。

错误指向:第8行“返回结果;

代码语言:javascript
复制
+ (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;
}
EN

回答 1

Stack Overflow用户

发布于 2021-09-16 00:09:51

Veracode扫描只会帮助您在代码中找到可以改进安全性相关编码的位置。当然,它并不能阻止攻击,但是如果您的应用程序确实是面向安全性的,那么读取处理后留下的内存就会变得更加困难。

Veracode日志中的"Error“一词可能被过度使用了。

但我的建议是.

代码语言:javascript
复制
+ (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以外的任何值,而是更改传递的参数。

代码语言:javascript
复制
+ (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用上面的编辑报告了什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69086447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档