Ruby on rails (Rails)测试用户是否尝试获取根目录
有一个脚本可以从用户处获取目录。如何检查用户是否试图获取比公用文件夹更高的级别 例如,我试图检测空字符串,所以如果我输入Ruby on rails (Rails)测试用户是否尝试获取根目录,ruby-on-rails,Ruby On Rails,有一个脚本可以从用户处获取目录。如何检查用户是否试图获取比公用文件夹更高的级别 例如,我试图检测空字符串,所以如果我输入“?directory=/”=>我将进入根目录。然后我尝试检查公用文件夹的路径是否在路径中。再次=>“?目录=/home/user/app/public/../../../../../../../../../”=>我再次在根目录中 如何测试它并拒绝访问?尝试以下方法: def path_valid?(path, base = Rails.public_path) expan
“?directory=/”
=>我将进入根目录。然后我尝试检查公用文件夹的路径是否在路径中。再次=>“?目录=/home/user/app/public/../../../../../../../../../”
=>我再次在根目录中
如何测试它并拒绝访问?尝试以下方法:
def path_valid?(path, base = Rails.public_path)
expanded_path_name = Pathname.new(path).realpath.to_s
expanded_path_name.starts_with? base
end
Pathname#realpath
将路径解析为绝对路径,并执行符号链接解析。这将让您精确地测试要操作的文件路径的位置,并确保它位于给定的路径内。听起来您试图做的任何事情都只是要求被利用。这就是为什么我要问的原因,这是一个明显的安全缺陷。您是否可以采取其他不需要像那样传递目录的方法?你在用它做什么?我在写网络文件管理器。(我没有找到有效的解决方案)。所以,它会发送带有目录路径的请求,而不是删除请求,我不敢想象,若用户得到比公共目录更高的目录,会发生什么。找到了临时解决方案,但我觉得它有问题<代码>if File.realpath(directory).to_.length