我有一个表单,当表单发布时,它会向我的 Flask 应用程序发送一个字符串。该字符串是一个文件路径,所以我想确保它不包含任何讨厌的东西,比如../../../etc/passwd
. Flask 使用的 Werkzeug 有一个方便的函数,称为secure_filename
从文件名中去除讨厌的东西。不幸的是,当输入像 的完整路径时templates/example.html
,它会将 转换/
为_
,所以我们最终得到templates_example.html
。
那么,将路径分成多个级别似乎是明智的,所以我分别发送templates
和example.html
然后在服务器上再次将它们连接在一起。这很好用,除了路径可以任意深。我可以串起来dir1/dir2/dir3/dir4
并希望没有人比 更深dir4
,但这似乎很愚蠢。
处理未知深度路径验证的正确方法是什么?验证不同?以不同的方式发送数据?对路径进行不同的编码,然后在服务器上对其进行解码?