在调用某些对系统进行配置的库函数、API 时,直接使用污点数据作为相关的配置参数,会为恶意 攻击者提供篡改操作系统的可能性,进而对操作系统造成破坏。
对于禁止使用被污染的数据进行操纵设置的情况,示例1给出了不规范用法(C/C++ 语言)示例。 示例2给出了规范用法(C/C++ 语言)示例。
示例1:
#include<Windows.h>
void f(LPCTSTR lpFileName, DWORD dwFileAttributes){
scanf("%d",&.dwFileAttributes);
SetFileAttributes(IpFileName,dwFileAttributes);
在如上示例中,函数 SetFileAttributes()对文件进行属性设置,其属性值是污点数据,该行为会导 致文件的属性可被攻击者任意设置。
示例2:
#include<Windows.h>
void f(LPCTSTR IpFileName){
if(CASE1) {
SetFileAttributes(IpFileName, dwFileAttributes value 1);
}else if(CASE2){
SetFileAttributes(IpFileName, dwFileAttributes value 2);
在如上示例中,通过 if语句,对 CASE 情况进行判断,进而对文件属性值进行具体的设置,即用预 先获知的可能的固定情况,代替了污点数据,保证了文件属性的安全性。