5

我们已经知道 use-after-free 漏洞可能会导致安全问题。由于释放后使用错误是由悬空指针产生的,我的问题是,如果悬空指针没有在程序中使用,它们被认为是安全的还是良性的(不是那么危险)?

4

2 回答 2

6

未使用的悬空指针并不危险……直到下一个开发人员使用它。您将问题标记为 C 和 C++;我会考虑你使用 C++,而不是 C。对于 C++,避免使用模糊语义和悬空倾向的原始指针。使用unique_ptrandshared_ptr可以帮助你很多。

无论如何,避免悬空指针。设置已删除的指针几乎不需要任何成本nullptr,而且可以节省大量的开发/调试时间。

如果你面临悬空指针的问题,或者至少是与它们相关的问题,你可能有机会应用美丽的rule of zero:要么你的类管理内存(你正在编写一个容器,一个特定的酷炫的指针包装器等),或者您正在编写一个不应拥有任何原始指针的非管理类。

于 2018-01-09T05:07:01.400 回答
4

尽管您从安全性和漏洞方面提出问题,但我认为避免悬空指针的更令人信服的原因是帮助程序及早失败。

将指针设置为NULLnullptr当它们的引用被删除时会创建一个易于识别的错误条件,一旦程序尝试引用指针,就可能导致失败。允许指针持续引用已释放的内存可能会导致以后难以调试的情况。

在 C++ 中,unique_ptr,shared_ptr等可以帮助您避免由悬空指针引起的问题。

在 C 和 C++ 中,地址清理可以帮助您发现内存滥用,例如不适当的引用指针。在 clang、gcc、clang++ 和 g++ 中,您可以通过将-fsanitize=address标志添加到您的编译选项来使用此工具(请注意,它还不能很好地与多线程配合使用)。

于 2018-01-09T23:28:39.693 回答