必须 路径穿越检查

Posted rsapaper

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了必须 路径穿越检查相关的知识,希望对你有一定的参考价值。

 

1.2.1【必须】 路径穿越检查

  • 在进行文件操作时,如果对外部传入的文件名未做限制,可能导致任意文件读取或者任意文件写入,严重可能导致代码执行。
// bad: 任意文件读取
func handler(w http.ResponseWriter, r *http.Request) 
	path := r.URL.Query()["path"][0]

	// 未过滤文件路径,可能导致任意文件读取
	data, _ := ioutil.ReadFile(path)
	w.Write(data)

	// 对外部传入的文件名变量,还需要验证是否存在../等路径穿越的文件名
	data, _ = ioutil.ReadFile(filepath.Join("/home/user/", path))
	w.Write(data)


// bad: 任意文件写入
func unzip(f string) 
	r, _ := zip.OpenReader(f)
	for _, f := range r.File 
		p, _ := filepath.Abs(f.Name)
		// 未验证压缩文件名,可能导致../等路径穿越,任意文件路径写入
		ioutil.WriteFile(p, []byte("present"), 0640)
	


// good: 检查压缩的文件名是否包含..路径穿越特征字符,防止任意写入
func unzipGood(f string) bool 
	r, err := zip.OpenReader(f)
	if err != nil 
		fmt.Println("read zip file fail")
		return false
	
	for _, f := range r.File 
		if !strings.Contains(f.Name, "..") 
			p, _ := filepath.Abs(f.Name)
			ioutil.WriteFile(p, []byte("present"), 0640)
		 else 
			return false
		
	
	return true

 

 

 

以上是关于必须 路径穿越检查的主要内容,如果未能解决你的问题,请参考以下文章

iOS解压缩_路径穿越_解析

使用分而治之法找到青蛙穿越池塘跳跃次数最少的路径

蓝桥杯 穿越雷区 2015年第六届蓝桥杯JavaB组决赛第四题

WEB安全基础入门—目录遍历(路径遍历路径穿越攻击)

[Java-sec-code学习]path_traversal路径穿越

穿越通道