用realpath对文件路径进行标准化处理
2018-03-31 本文已影响23人
金琥
对代码进行静态检查时,出现canonical filepath错误,这个错误表示文件路径未经标准化处理。攻击者会有机会:
1)构造一个跨越目录限制的文件路径,例"../../../etc/passwd"或者"../../boot.ini"
2)构造一个指向系统关键文件的链接文件,例如 symlink("/etc/shadow","/tmp/log")
上述两种方式之一可以实现读取或修改系统重要数据文件,威胁系统安全
因此,不能直接拿用户的输入*input_path作为参数执行
linux下用realpath进行标准化处理
char path[PATH_MAX +1] = {0x00};
if( strlen(input_path) > PATH_MAX || NULL==realpath(input_path,path) )
return;
win下可以用PathCanonicalize进行标准化,头文件Shlwapi.h,导入Shlwapi.lib库
char path[PATH_MAX +1] = {0x00};
char *lppath = path;
if( strlen(input_path) > PATH_MAX || FALSE == PathCanonicalize(lppath,input_path) )
return;
有条件也可以使用微软推荐的PathCchCanonicalize() PathCchCanonicalizeEx() 来进行路径标准化