C++程序猿阵线联盟-汇总各类技术干货

用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() 来进行路径标准化

上一篇下一篇

猜你喜欢

热点阅读