0

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

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

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

但就像所有自己编写的安全检查代码一样,我希望它能够受到更好的审查!毕竟,它并没有说明该路径实际上是合法的。

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

4

1 回答 1

4

您可以使用Werkzeug 的secure_filename

werkzeug.utils.secure_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'
于 2012-12-14T08:11:17.483 回答