文件目录穿越
在有input框需要输入文件目录时,由于客户可以输入 ../**.py类似的方式,可以查看到其他路径的文件,从而导致安全风险。
设置文件白名单的方式解决
def check_allowed_filepath(file_path):
allowed_filepath = ['F:/app/', 'D:/Python27/Lib/site-packages/django/']
tag = False
for tmp in allowed_filepath:
if cmp(file_path[0:len(tmp)], tmp) == 0:
tag = True
break
return tag
可以将某些文件输入到白名单中,然后在里面进行对比即可。
对于没有前端不允许输入绝对路径的,在进行路径的拼接时不要使用os.path.join,此时如果前端输入正确的绝对路径,则后面的路径将会成为拼接结果,建议使用字符串直接拼接。
在进行代码审查的时候,需要先行确认对服务器上文件进行操作的接口,并确认文件的路径或文件名是否来自于post或get参数。如果存在这样的参数,则需要检查参数是否根据需要进行相应的过滤和处理。