确定路径是否合法

时间:2012-12-14 08:00:30

标签: python security

如何检查用户提供的路径是否已清理?

我想确保它没有通配符,也没有任何恶作剧。现在,我正在检查它是不是转义正确的文件夹所以:

if os.path.commonprefix([os.path.abspath(path),os.getcwd()]) != os.getcwd():
    # raise error etc..

但是就像所有自编的安全检查代码一样,我希望它能够得到更好的审查!并没有解决这条道路实际上是合法的。

然后我将使用创建资产等的路径。

1 个答案:

答案 0 :(得分:4)

您可以使用Werkzeug's secure_filename

  

werkzeug.utils.secure_filename(filename)

     

传递一个文件名,它将返回它的安全版本。这个   然后可以安全地将filename存储在常规文件系统上并传递   到os.path.join()。返回的文件名是仅ASCII字符串   最大可移植性。

     

在Windows系统上,该功能还可以确保文件不是   以其中一个特殊设备文件命名。

>>> secure_filename("My cool movie.mov")
'My_cool_movie.mov'
>>> secure_filename("../../../etc/passwd")
'etc_passwd'
>>> secure_filename(u'i contain cool \xfcml\xe4uts.txt')
'i_contain_cool_umlauts.txt'