美文网首页C++程序猿阵线联盟-汇总各类技术干货
用realpath对文件路径进行标准化处理

用realpath对文件路径进行标准化处理

作者: 金琥 | 来源:发表于2018-03-31 21:20 被阅读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() 来进行路径标准化

    相关文章

      网友评论

        本文标题:用realpath对文件路径进行标准化处理

        本文链接:https://www.haomeiwen.com/subject/lisncftx.html