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