PORTING.CAST.PTR

指针和非指针类型之间的转换

PORTING 检查器会标识那些可能依赖于不同编译器中特定实施细则的代码。PORTING.CAST.PTR 检查器会搜索指针到非指针或相反方向的类型转换。

漏洞与风险

取决于平台和使用的体系结构,指针与整型(比如无符号整数)可能代表同样数目的位数,也可能代表不同的数目,因此,指针类型到非指针类型的转换被视为是不安全的操作,反之亦然。

缓解与预防

请勿尝试在整型中存储指针值。如果指针指向的类型确实必须隐藏,请使用虚值指针来代替。

漏洞代码示例

复制
   extern char* getData();
   void foo()
   {
     char* ptr = getData();
     unsigned int ptrValue = (unsigned int)ptr;
       printf("Got data from: %d\n", ptrValue);
   }

这种指针类型与整型的交换在某些平台上肯定会失败,因此应在所有平台上都将其视为不安全。

修正代码示例

复制
   extern char* getData();
   void foo()
   {
     char* ptr = getData();
     void* ptrValue = (void*)ptr;
       printf("Got data from: %p\n", ptrValue);
   }

在经修复的示例中,使用了虚值指针来代替不安全的表达式。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。