如果我们的网页能够读取或删除某个文件夹中的文件(基于名称),例如:'public/upload/'
,我们必须使用哪种过滤来防止出现安全问题?
例如在Ruby / Sinatra中:
file_name = params[:file_name]
base_dir = 'public/upload/'
# prevent user from entering ../../../../../etc/passwd or any other things
file_name.gsub!('../','')
File.delete "#{base_dir}/#{file_name}"
够了吗?
答案 0 :(得分:1)
这种过滤总是容易出错。但是,一些可行的,但我不能说是防弹的,就是这样:
Preventing Directory Traversal in PHP but allowing paths
Ruby有类似于php" realpath" AFAIK。
OWASP也对如何防止路径遍历有所了解: https://www.owasp.org/index.php/File_System#Path_traversal
以及如何利用路径遍历的示例: https://www.owasp.org/index.php/Path_Traversal