如何检查用户提供的路径是否已清理?
我想确保它没有通配符或任何恶作剧。现在,我正在检查它是否没有转义正确的文件夹,所以:
if os.path.commonprefix([os.path.abspath(path),os.getcwd()]) != os.getcwd():
# raise error etc..
但就像所有自己编写的安全检查代码一样,我希望它能够受到更好的审查!毕竟,它并没有说明该路径实际上是合法的。
然后我将使用该路径来创建资产等。
您可以使用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'