Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails (Rails)测试用户是否尝试获取根目录_Ruby On Rails - Fatal编程技术网

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